设计模式(一) 八个设计原则
设计模式
一个实际任务往往可以分成不同的部分,通过向下继续分解,可以得到不同的子任务。学者们发现,存在一些典型任务,这些任务是具有普遍适用性的,并且存在一些程序结构,可以更好地完成任务。这个“更好”被定义为后面讲到的八个设计原则。这些典型任务对应的解决方案(这些好的程序结构)就被称为设计模式(Design Pattern)。
这八个设计原则都是基于一个点所延展开来的,这就是现代编程工程的主要矛盾,即“需求总是在不断变化的”。可以说,所有的设计模式,都是以不同的角度,处理这一个主要矛盾的某些方面。
另外,这几篇文章的内容主要是“面向对象”方面的设计模式。
多态
外部接口是一致的,内部实现却是不同的,就像一个对象有多个形态一样。这是一种设计的概念,在具体的语言的实现中自然有不同方法。
- C,函数指针
- C++,虚函数(Virtual)与重写(Override)
- Python,动态绑定
复用和依赖
一个程序到落地将经历编写、编译、链接和生成可执行文件。
复用代码指的是,编译时,有些代码的先前的编译结果可以直接使用。比如C++中,如果一个类的实现没有被修改,并且继续被使用,则它上一次的编译结果仍然是有效的。
依赖通常与代码中的调用有关,被调用的内容的编译次序显然要优先于调用它的内容,则称后者依赖于前者。
依赖倒置原则
Dependence Inverse Principle
程序结构的高层应是稳定的,底层可以是变化的,但高层不依赖于底层,两者都依赖于抽象。抽象应是稳定的,实现细节可以是变化的,但抽象不依赖于实现细节。
开放封闭原则
Open Closed Principle
扩展开放,修改封闭
比如允许另外新增类或函数,但禁止修改原有的类的实现细节
单一职责原则
Single Responsibility Principle
一个类的职责不应过多,适可而止。
引起一个类发生变化,应只有一个方向上的原因,这个变化的方向隐含了类的职责。
Liskov 替换原则
Liskov Substitution Principle
子类能直接替代基类。换而言之,继承发生在类型的抽象。
接口隔离原则
Interface Segregation Principle
接口尽可能小而完备。