设计模式简介

xiaoxiao2021-03-01  43

简介

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。

设计模式分为三种类型,分别是:创建型模式、结构型模式,行为型模式。

设计模式六大原则

单一职责原则 不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,否则就应该把类拆分。里氏替换原则 任何基类可以出现的地方,子类一定可以出现。里氏替换原则是继承复用的基石,只有当衍生类可以替换基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。 里氏代换原则是对“开-闭”原则的补充。实现“开闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。里氏替换原则中,子类对父类的方法尽量不要重写和重载。因为父类代表了定义好的结构,通过这个规范的接口与外界交互,子类不应该随便破坏它。依赖倒置原则 面向接口编程,依赖于抽象而不依赖于具体。写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。迪米特原则 一个类对自己依赖的类知道的越少越好。无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。这样当被依赖的类变化时,才能最小的影响该类。 最少知道原则的另一个表达方式是:只与直接的朋友通信。类之间只要有耦合关系,就叫朋友关系。耦合分为依赖、关联、聚合、组合等。我们称出现为成员变量、方法参数、方法返回值中的类为直接朋友。局部变量、临时变量则不是直接的朋友。我们要求陌生的类不要作为局部变量出现在类中。接口隔离原则 每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。合成复用原则(Composite Reuse Principle) 尽量首先使用合成/聚合的方式,而不是使用继承。

总原则:开闭原则 对扩展开放,对修改封闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。

设计模式

创建型模式

模式简介单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类,将类的实例化延迟到其子类抽象工厂为创建一组相关或者依赖的对象提供一个接口,且无需指定他们的具体类建造者模式将一个复杂对象的构建和他的表示分离,使得同样的构建过程可以创造不同的表示原型模式用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象

结构型模式

模式简介适配器模式将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作桥接模式将抽象和实现解耦,使得两者可以独立的发生变化组合模式将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性装饰模式动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活、可作为继承的替代门面模式要求一个子系统的外部接口与其内部的通信必须通过一个统一的接口进行享元模式使用共享对象可以有效地支持大量细粒度对象代理模式为其他对象提供一种代理以控制对这个对象的访问

行为型模式

模式简介责任链模式将对象链成一条链,并沿着这条链传递该请求/命令,直到有对象处理它为止命令模式将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化解释器模式给定一门语言,定义文法表示,定义解释器,用来解释语言的句子迭代器模式提供一种方法访问一个容器对象中的各个元素,而不暴露该对象内部细节中介者模式用一个中介对象封装一系列的对象交互,中介者使各个对象不需要显示的相互作用,从而使其耦合松散备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态观察者模式定义对象间一种一对多的依赖关系,使得当一个对象改变状态时,所有依赖他的对象都能获得通知并被自动更新状态模式当一个对象内在状态改变时允许其行为改变,这个对象看起来像改变了其类策略模式定义一组算法,将每个算法都封装起来,并且使他们可以相互替换模板方法定义一个操作的算法的框架,而将一些步骤延迟到子类中访问者模式封装一些作用于某种数据结构中各元素的操作,他可以在不改变数据结构的前提下定义作用于这些元素新的操作
转载请注明原文地址: https://www.6miu.com/read-3450102.html

最新回复(0)