1、引言
本篇内容主要是介绍C++中类与类之间Composition(复合)、Delegation(委托)和Inheritance(继承)的基本设计模式,如Adapter、pimpl、Template Method、Observer、Composite和Prototype。
2、Composition的用法
1) Contaner与Compoent
2)两者间关系
注意点:
a、这是一种Adapter(适配器)的设计模式,适用于只开放部分类方法的情形,且在Adapter中实现部分方法的调用,是对一个类的封装的用法;
b、Contaner的构造函数首先调用Component的默认构造函数,然后才执行自己;
c、Container的析构函数首先执行自己,然后才调用Component的析构函数;
d、构造函数与析构函数是内外同步的。
3、Delegation(Composition by reference)的用法
1)、Handle/Body
2)两者间关系
注意点:
a、这种委托的实现方式是通过pimpl(point to implementation)设计模式实现,即通过针对变量指向一个类;
b、构造函数和析构函数在两者间是不同步的;
c、Handle部分提供的是接口部分,底层可以通过Body部分实现不同的操作;
4、Inheritance的用法
1)继承的关系
注意点:
a、构造函数由内而外,即Derived的构造函数首先调用Base的默认构造函数,然后才执行自己;
b、析构函数由外而内,即Derived的析构函数首先执行自己,然后才调用Base的析构函数;
c、base类的析构函数必须是virtual,否则会出现未定义的行为。
2)继承与虚函数
通过类成员函数有三种:非虚函数、虚函数和纯虚函数。
- 非虚函数:不希望派生类重新定义;
- 虚函数:有默认的定义,希望派生类重新定义;
- 纯虚函数;没有默认的定义,派生类一定要重新定义。