设计模式
设计原则
或者类设计原则:
1. 单一职责原则(Single Responsibility Principle,SRP)
即:要求一个类都只有一个职责,如果职责超过一个,那么就会耦合。职责才是变更原因。
2. 里氏替换原则(LSP)
子父类关系:要求子类必须能够替换其父类。
例:
Mechanic 和 Accountant 继承 User;
Car 和 Accessory 继承 Product。
ServiceStatistics 继承 Statistic。
那么在ServiceStatistics 中有方法:
vector<Product> getStatistics( Mechanic m);
那么在Statistics中方法:
vector<Accessory>getStatistics(User u);
注意:
子类中的返回类应该是子类,参数值是父类。
父类中的返回值是父类,参数值是子类。
这样才能满足子类中使用getStatistics方法时可以实现父类的个体Statistics的方法。
3. 依赖倒置原则(DIP)
高层模块不应该依赖底层模块,他们都应该依赖于抽象,具体不应该依赖细节,细节应该依赖抽象。
这也是为什么Java中抽象类实现的原因。
DIP设计时要求针对接口编程,即“契约式设计”。
4. 接口隔离原则
在依赖倒置原则中规定,类与类之间通过接口。通过先设计实现接口,针对接口编程。
5. 开放-关闭原则(OCP)
指:类,模块,函数等针对扩展开放,对修改关闭。
允许软件实体在其声明周期内进行变更,又保证了这种变更不会对软件实体的现有代码和依赖与他的其他软件实体进行变更。
设计模式
什么是设计模式?
设计模式是实现设计复用的有效手段。所谓模式,是针对给定上下文的通用问题的通用解决方案。
其实设计模式就是软件设计过程中前人总结的一系列场景当中的一些比较常用的方法,或者说套路。
设计模式有哪些?
设计模式按照目的分类可以分为 三类:
创建型设计模式 - 这类主要关注对象的创建过程。
(Abstract Factory Pattern/抽象工厂模式)由谁来创建?这个谁又是谁来创建(Factory Method Pattern/工厂方法)?创建的对象是所有创建过程都是通过类的Construct方法创建?还是使用Clone方法以节省创建初始化的开销(Prototype Pattern),还是每一次创建返回的都是同一个对象(Singleton Pattern),最后与抽象工厂模式相对的,如果要抽象工厂要创建的几个对象之间关系紧密,那么可以创建复合对象(Builder Pattern)结构型模式 - 处理类和对象的组合关系。
主要有七种:Adapter Pattern,Bridge Pattern,Component Pattern, Decorate Pattern, Facade Pattern,Flyweight Factory,Proxy Pattern.行为型设计模式 - 主要用来刻画类或者对象之间的交互方式(一个类的行为或者属性变化怎样影响到其他类的属性或方法)和职责分布的特性。
主要有:Chain of Responsibility Pattern, Mediator Pattern Pattern,Observer Pattern,Visitor Pattern,Memento Pattern.
创建型设计模式
抽象工厂模式:
通过定义AbstructFactory接口,在它的子类中(Concretefactory1,Concretefactory2)中针对不同的需求(ProductA1,ProductA2,ProductB1,ProductB2)实现不同的CreteProduct方法。
工厂方法:
参考链接: