设计模式是由设计原则迭代出来的
-
开闭原则:一个类应该对扩展开放,对修改关闭
稳定的部分稳定住,变化的部分扩展
扩展可以通过继承和组合
相关原则:单一职责原则、里氏替换原则、接口隔离原则
-
单一职责原则:一个类应该仅有一个引起它变化的原因
-
里氏替换原则:子类方法复写父类方法时,需要实现父类方法的职责,避免之前调用发类方法的地方错误
场景:多态中虚函数覆盖
如果没有实现,原来调用父类方法的地方可能出错
目标:对扩展开放、约束了扩展中的继承
-
接口隔离原则:不应该强迫客户依赖于它不用的方法:通过public、private、protected;一个类对另一个类的依赖应建立在最小的接口上
-
迪米特原则:最少知道原则;尽量降低类与类之间的耦合度
一个对象对其他对象保持最小的了解
目标:
- 高内聚:相近的功能应该放在同一个类中,不相近不要放在同一个类中
- 低耦合:类与类之间的依赖关系要简单清晰;依赖越少越好
要求:
- 不该有直接依赖关系的类之间,不要有依赖
- 有依赖关系的类之间,尽只依赖必要接口
class Network{
public:int Write(int fd,unsigned char* buf,size_t sz);int read(int fd,unsigned char *buf,size_t sz);};
class HTTP{
private:Network *pNet;
};
class Protobuffer{Network *pNet;
};class IEncode{
public:unsigned char * encode(HTTP *p) = 0;
};
class IDecode{json * decode(HTTP *p);
};
class A:public IEncode,IDecode{unsigned char*encode(HTTP *p);json * decode(HTTP *p);
};
class B:public IEcode{};
class C:public IDecode{};
-
依赖倒置原则:高层模块不应该依赖底层模块,两者都依赖于抽象;抽象不应该依赖具体实现,具体实现应该依赖于抽象;抽象确定稳定点
目标:高内聚,低耦合
要求:
- 高层模块不应该依赖低层模块,两者都依赖于抽象
- 抽象不应该依赖于具体实现
-
组合优于继承
获取更多Linux C/C++资料