设计模式原则和分类
从今天开始学习设计模式,主要参考博览网的C++设计模式教程。
设计模式原则
1.依赖倒置原则(DIP,Dependence Inversion Principle )
- 高层次的模块(稳定)不应该依赖于低层次的模块(变化),二者都应该依赖于抽象。
- 抽象(稳定)不应该依赖于实现细节,实现细节应该依赖于抽象。
我从c++的角度来理解:高层次的模块指基类,低层次的模块是指派生类,基类不应该依赖于派生类;抽象是指基类中的接口,基类派生类都应该依赖于接口,实现细节是指接口的具体实现,接口的具体实现当然应该依赖于接口本身。
2.开放封闭原则(OCP,Open Closed Principle)
- 对扩展开放,对更改封闭。
对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改,因为修改的代价太大了,可能牵一发而动全身。
3.单一职责原则(SRP:Single responsibility principl)
- 一个类应该有且仅有一个引起它变化的原因。
- 变化的方向隐含这着类的职责。
这个原则不是很理解,等哪天理解深刻了,再来写。
4.里氏替换原则(LSP,Liskov Substitution Principle )
- 派生类必须能够替换它们的基类。
在c++中,public继承意味着派生类和基类是”is a”关系,也就意味着适用于基类身上的每一件事也一定适用于派生类,基类出现的地方,派生类就可以代替其出现。
5.接口隔离原则(ISP,Interface Segregation Principle )
- 不应该强迫客户端依赖它们不需要的接口或者方法。
- 接口应该小而完备,一个类对另一个类的依赖应该建立在最小的接口上。
设计模式分类:
一.从目的来看:
1.创建型模式:将对象的部分创建工作延迟到子类或者其他对象,从而应对需求变化为对象创建时具体类型实现引来的冲击。
单例模式(Singleton Pattern)
工厂模式(Factory Pattern)
抽象工厂模式(Abstract Factory Pattern)
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)2.结构型模式:通过类继承或者对象组合获得更灵活的结构,从而应对需求变化为对象的结构带来的冲击。
适配器模式(Adapter Pattern)
桥接模式(Bridge Pattern)
组合模式(Composite Pattern)
装饰器模式(Decorator Pattern)
外观模式(Facade Pattern)
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)3.行为型模型:通过类继承或者对象组合来划分类与对象间的职责,从而应对需求变化为多个交互的对象带来的冲击。
责任链模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解释器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
备忘录模式(Memento Pattern)
观察者模式(Observer Pattern)
状态模式(State Pattern)
策略模式(Strategy Pattern)
模板模式(Template Pattern)
访问者模式(Visitor Pattern)
二.从封装变化角度对模式分类
1.组件协作:
•模板模式 Template Method
•观察者模式 Observer
•策略模式 Strategy2.单一职责:
•装饰器模式 Decorator
•桥接模式 Bridge3.对象创建:
•工厂模式 Factory Method
•抽象工厂模式 Abstract Factory
•原型模式 Prototype
•建造者模式 Builder4.对象性能:
•单例模式 Singleton
•享元模式 Flyweight5.接口隔离:
•外观模式 Facade
•代理模式 Proxy
•中介者模式 Mediator
•适配器模式 Adapter6.状态变化:
•备忘录模式 Memento
•状态模式 State7.数据结构:
•组合模式 Composite
•迭代器模式 Iterator
•责任链模式 Chain of Resposibility8.行为变化:
•命令模式 Command
•访问者模式 Visitor9.领域问题:
•解释器模式 Interpreter