23种设计模式及六+一原则

一、设计模式的分类

https://gitee.com/teng21314/DesignModel23
总体来说设计模式分为三大类

  • 创建型模式,共五种:

    单例模式(Singleton)
    工厂方法模式(Factory)
    抽象工厂模式(AbstractFactory)
    建造者模式
    原型模式

  • 结构型模式,共七种:

    适配器模式
    装饰器模式
    代理模式
    外观模式
    桥接模式
    组合模式
    享元模式

  • 行为型模式,共十一种:

    策略模式
    模板方法模式
    观察者模式
    迭代子模式
    责任链模式
    命令模式
    备忘录模式
    状态模式
    访问者模式
    中介者模式
    解释器模式

其他:
并发型模式
线程池模式23种设计模式及六+一原则

二、六+一原则

1、开闭原则(Open Close Principle)

开闭原则Open-Close Principle(OCP):一个软件实体应该对扩展开放,对修改关闭。目的就是保证程序的扩展性好,易于维护和升级,想要达到这样的效果,需要使用接口和抽象类

优点:软件可用性非常灵活,扩展性强。新增加需求时,可以增加新的模块来满足新需求,而不是修改原来的模块,这样就不用担心原来模块的稳定性的问题。

精华:扩展开发,修改关闭

2、里氏代换原则(Liskov Substitution Principle)

里氏代换原则Liskov Substitution Principle:子类可以扩展父类的功能,但是不能改变父类原有的功能。 任何基类可以出现的地方,子类一定可以出现。

里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

精华:子类替换父类

3、依赖倒置原则(Dependence Inversion Principle)

Dependence Inversion Principle(DIP):是一个类与类之间的调用规则。这里的依赖就是代码中的耦合。高层模块不应该依赖底层模块,二者都应该依赖其抽象了;抽象不依赖细节;细节应该依赖抽象。

例如:Animal与dog,cat。Driver与Car,Bus。如果高层依赖底层,就变成了高层与底层同时依赖抽象。这就是依赖倒转原则的本质。

所以依赖倒置原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。

精华:细节依赖抽象

4、接口隔离原则(Interface Segregation Principle)

接口隔离原则(Interface Segregation Principle):用于恰当的划分角色和接口。
既要建立单一接口,代替庞大臃肿的接口,接口尽量细化,同时保证接口中的方法尽量的少,一个接口中包含太多的行为时,会导致它们与客户端的不正常依赖关系,要做的就是分离接口,从而实现解耦。
也要要求尽量使用多个专门的接口。专门的接口也就是提供给多个模块的接口。提供给几个模块就应该有几个接口,而不是建立一个臃肿庞大的接口,所有的模块都可以访问。

总结为: 接口要多而专。

精华:不让单一接口承担过多的职责

5、迪米特法原则(Demeter Principle)

Law of Demeter(最小知识原则):一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。通俗来说就是,一个类对自己需要耦合或者调用的类知道的最少,不管类的内部多么复杂,只需要知道有多公用的方法能够调用。

迪米特原则不希望类与类之间建立直接的接触。如果真的需要有联系,那么就通过它们的友元类来传达。

缺点是:系统会存在大量的中介类,这些类之所以存在是为了传递类之间的相互调用关系,这就一定会程度上增加了系统的复杂度。

精华:不要和陌生人说话

6、单一职责原则(Single-Responsibilitiy Principle)

Single-Responsibilitiy Principle(SRP):对一个类而言,应该仅有一个引起它变化的原因。如果存在多于一个动机去改变一个类,那么这个类就具有多于一个的职责,就应该把多余的职责分离出去,再去创建一些类来完成每一个职责。

总结:高内聚,低耦合。

精华:一个类承担的职责尽量单一

7、合成复用原则(Composite Reuse Principle)

合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承

精华:多组合,少继承。