设计模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化。设计模式分为三种类型,分别是:创建型模式、结构型模式,行为型模式。
23种设计模式
- 创建型模式,共5种:单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。
- 结构型模式,共7种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
- 行为型模式,共11种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
六大原则
1,单一职责原则(Single Responsibility Principle, SRP)
定义:一个类应只包含单一的职责。
- 如果一个类职责过多,代码量就多,而使用起来显得过分冗余,不利于复用。
- 如果修改某个职责,可能影响另一个职责。
2,开放封闭原则(Open - ClosedPrinciple ,OCP)
定义:一个模块、类、函数应当是对修改关闭,对扩展开放。
- 修改原有的代码可能会导致原本正常的功能出现问题。
- 当需求改变时,最好通过扩展来实现,增加新的方法或类满足需求,而不是去修改原有代码。
3,里氏代换原则( Liskov Substitution Principle ,LSP )
定义:使用父类的地方能够使用子类来替换,反过来,则不行。
- 使用子类对象去替换父类对象,程序将不会产生错误。
- 程序中尽量使用基类类型来对对象进行定义,如父类的子类引用,而在运行时再确定其子类类型,用子类对象来替换父类对象。
4,依赖倒转原则( Dependence Inversion Principle ,DIP )
定义:抽象不应该依赖于细节,细节应当依赖于抽象。
- 即要面向接口编程,而不是面向具体实现去编程。
- 高层模块不应该依赖低层模块,应该去依赖抽象。
- 方法定义时,传入对象用抽象类型,实际使用时传入子类对象。
5,接口隔离法则(Interface Segregation Principle,ISL)
定义:一个类对另一个类的依赖应该建立在最小的接口上。
- 一个类不应该依赖他不需要的接口,接口的方法全要用得到。
- 接口粒度要尽可能小,尽量不能再分割。一个接口的方法过多,可以拆成多个接口。
6,迪米特法则(Law of Demeter, LoD)
定义:一个类尽量不要与其他类发生关系
- 一个类对其他类知道的越少越好,耦合越小。导入的东西越少越好。
- 当修改一个类时,其他类的影响就越小,发生错误的可能性就越小。
附件
设计模式Demo
GitHub源码:https://github.com/wzmyyj/Design-Pattern