1.设计模式总览
1.1基本概念
模式就是一套被反复使用解决某一问题的方案,包括三个基本元素(问题,解决方案,环境)
设计模式就是为了可重用代码,让代码更容易被他人理解,保证代码可靠性的一种经验总结。
设计模式的基础是多态。多态的原理是编译器为每一个含有虚函数的子类和父类提前布置了一个vptr指针,通过这个vptr指针找到一个虚函数表,根据虚函数表找到后来人写的代码去执行。
1.2分类
Design Patterns:Elements of Resualbel Software将设计模式归纳为以下3个大类
创造型模式:通常和对象的创建有关,设计到对象实例化的方式。(共5种模式)
结构性模式:描述的是如何组合类和对象以获得更大的结构。(共7种模式)
行为型模式:用来对类或对象怎样交互和怎样分配职责进行描述(共11种模式)
1.3基本原则
高内聚,低耦合
1)开放封闭原则:
类的改动是通过增加代码进行的,而不是修改源代码。
2)单一职责原则:
类的职责要单一,对外只提供一种功能,而引起类变化的原因都应该只有一个。
//以上两个原则可以举例如下,想要修改只需要增加新的代码而无需修改抽象父类
class AvBankWorker
{
public:
virtual void dothing() = 0;
private:
};
class SaveBanker :public AvBankWorker
{
public:
virtual void dothing() {
cout << "存款" << endl;
}
};
class PayBanker :public AvBankWorker
{
public:
virtual void dothing() {
cout << "缴费" << endl;
}
};
class MoveBanker :public AvBankWorker
{
public:
virtual void dothing() {
cout << "转账" << endl;
}
};
void main() {
AvBankWorker * bw = NULL;
bw = new MoveBanker;
bw->dothing();
delete bw;
system("Pause");
}
3)依赖倒置原则:
依赖于抽象(接口),不要依赖具体的实现(类),也就是针对接口编程。
4)接口隔离原则:
不应该强迫客户的程序依赖他们不需要的接口方法,一个接口应该只提供一种对外功能,不应该强迫客户的程序依赖他们不需要的接口方法。一个接口应该只提供一种对外功能,不应该把所有操作都封装到一个接口中去。
5)里氏替换原则:
任何抽象类出现的地方都可以用他的实现类进行替换,实际就是虚拟机制,语言级别实现面向对象功能。
6)优先使用组合而不是继承关系:
如果使用继承,会导致父类的任何变换都可能影响到子类的行为。如果使用对象组合,就降低了这种依赖关系。
7)迪米特法则:
一个对象应当对其他对象尽可能少的了解,从而降低各个对象之间的耦合,提高系统的可维护性。例如在一个程序中,各个模块之间互相调用时,通常会提供一个同一的接口来实现。这样其他模块不需要了解另一个模块的内部实现细节,这样当一个模块内部的实现发生改变时,不会影响其他模块的使用。黑盒原理
2.创造型模式:
2.1工厂方法模式:用意是定义要给创建产品对象的工厂接口,将实际创建工作推迟到子类中。
2.2抽象工厂模式:意图是提供一个创建一系列相关或者相互依赖的接口,而无需指定他们具体的类。
2.3建造者模式:意图是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
2.4原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
2.5单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
3.结构性模式:
4.行为型模式:
来源:CSDN
作者:Fm镄
链接:https://blog.csdn.net/weixin_39568744/article/details/104714670