组合与继承
Composition组合,表示has a
queue只开放了deque的部分功能,adapter适配器模式
组合之下的构造和析构
构造由内而外,先构建里层一层一层构建
Container的构造函数首先调用Component的default构造函数,然后才执行自己
析构由外而内,先剥掉外层再一层一层往里
Container的析构首先执行自己,然后才调用Component的析构函数。
注:以上红色操作都由编译器自动完成,这里剖析其执行次序
Delegation(委托,聚合)Composition by reference
只有一个指针指向对方,但是什么时候拥有它,看情况。
组合:有了外部就会有内部
聚合:有了外部,等需要内部的时候再去创建它
Handle/Body pimpl:所有的功能都由那个指针完成。
引用计数,共享内存,更改时复制一个副本,copy on write
Inheriance(继承)表示is a
继承关系下的构造和析构
base class的dtor必须是虚函数,否则会出现undefined behavior
构造由内而外
Derived的构造函数首先调用Base的default构造安徽省农户然后才执行自己
析构由外而内
Derived的析构阿寒湖首先执行自己,然后才调用Base的析构函数
Inheritance继承with virtual function虚函数
non-virtual 非虚函数:你不希望derived class重新定义(override,重写)它
virtual 函数:你希望derived class重新定义它,并且你对它已经有默认定义
pure virtual函数:你希望derived class一定要重新定义它,你对它没有默认定义
模板方法 Template Method
Inheritance_Composition关系下的构造和析构
Component先然后是Base
Delegation委托+Inheritance继承 (观察者模式)
一个有变化,大家都变化
Subject放数据
Observer观察者
subject包含函数:attach 添加观察者、notify通知观察者
Observer可以被继承:update接受通知后更新数据
委托的相关设计
Delegation(委托)+Inheritance(继承)
组合模式
File系统
Primitive基本的个体
Composition是一个容器:可以放Primitive也可以放自己。
左右都继承Component
Composite即可以包含左边也可以包含右边,所以直接将类型直接定义为其共同的父类。
组合模式:例如文件系统:primitive类比于文件,composite相当于文件夹里面可以放文件也可以放文件夹。
add函数定义成虚函数,primitive可以不要重新add
Prototype
现在的框架要去创建未来的class
static 自己创造自己的原型,而这个原型必须登记到父类中。static原型的作用是在再程序开始的时候就把自己注册到父类中
静态的自己被创建时会调用私有的构造函数(-LandSatImage()),私有的构造函数会调用addPrototype()会把自己挂载到父类的容器中。
子类应该有一个clone:作用可以复制自己。框架父类可以通过刚刚static的原型,调用clone() new自己。
new的时候一定不能再调用静态的那个,所以作者将另一个构造函数加了一个参数。所以clone的时候调用的是有参数的那个构造函数。