什么是设计模式?
设计模式是指针对软件开发过程中重复发生的问题的解决方法。说起设计模式,最有名的就是GoF的23种设计模式(本次整理的也均为这23种设计模式)。
设计模式分类
GoF将设计模式分为以下三类:
- 创建型设计模式,共5种
- 工厂方法模式(Factory Method Pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 单例模式(Singleton Pattern)
- 建造者模式(Builder Pattern)
- 原型模式(Prototype Pattern)
- 结构型设计模式,共7种
- 适配器模式(Adapter Pattern)
- 桥接模式(Bridge Pattern)
- 组合模式(Composite Pattern)
- 装饰者模式(Decorator Pattern)
- 外观模式(Facade Pattern)
- 享元模式(Flyweight Pattern)
- 代理模式(Proxy Pattern)
- 行为型设计模式,共11种
- 责任链模式(Chain of Responsibility Pattern)
- 命令模式(Command Pattern)
- 解释者模式(Interpreter Pattern)
- 迭代模式(Iterator Pattern)
- 中介者模式(Mediator Pattern)
- 备忘录模式(Memento Pattern)
- 观察者模式(Observer Pattern)
- 状态模式(State Pattern)
- 策略模式(Strategy Pattern)
- 模板方法模式(Template Method Pattern)
- 访问者模式(Visitor Pattern)
设计模式6大原则
开闭原则 (Open Close Principle)
对扩展开放,对修改关闭。实现开闭原则的关键就在于“抽象”,用抽象去构建框架,用实现扩展细节。因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。里氏替换原则(Liskov Substitution Principle)
“Inheritance should ensure that any property proved about supertype objects also holds for subtype objects.”——”继承必须确保超类所拥有的性质在子类中仍然成立。”
子类对父类的方法尽量不要重写和重载。因为父类代表了定义好的结构,通过这个规范的接口与外界交互,子类不应该随便破坏它。
依赖倒置原则(Dependence Inversion Principle)
针对接口编程,依赖于抽象而不依赖于具体。接口隔离原则(Interface Segregation Principle)
接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。
为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。迪米特法则(Demeter Principle)
Talk only to your immediate friends。
外观模式(Facade)和中介者模式(Mediator),都是迪米特法则应用的例子。合成复用原则(Composite Reuse Principle)
尽量使用对象组合,而不是继承来达到复用的目的。