学习BoolanC++笔记_03(C++面向对象高级编程(上)第三周)
作者: ayaoko
出处: http://www.cnblogs.com/fyc006/>
关于作者:小可才疏学浅还请多多赐教!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(270469391@qq.com)咨询.
(可参考23种设计模式深入学习 A基类,B派生类)
Composition(复合)
Composition 复合 has-a
Adapter
本类A只是容器,包含已经实现的多功能的类B,A可选择性包含部分B中需要的部分.
构造由内而外
Container的构造函数首先调用Component的default构造函数,然后才执行自己。
Container::Container(...):Component(){...};
析构由外而内
Container的析构函数首先执行自己,然后才调用Component的析构函数。
Container::~Container(...){...~Component()};
Delegation(委托).Composition by reference.
Handle/Body
pImpl
本类A只是容器,指针指向已经实现的多功能的类B,A可选择性指向部分B中需要的部分.(创建周期不同步,编译防火墙)
reference counting(共享的方式)
Inheritance(继承)表示is-a
构造由内而外
Derived的构造函数首先调用Base的default构造函数,然后才执行自己。
Derived::Derived(...):Base(){...};
析构由外而内
Derived的析构函数首先执行自己,然后才调用Base的析构函数。
Derived::~Derived(...){...~Base()};
(Base class 的dtor必须是virtual,否则会出现undefined behavior)
Inheritance(继承)with virtual functions(虚函数)
non-virtual函數:你不希望derivedclass重新定義(override,覆寫)它·
virtual 函數:你希望derivedclass重新定義(override,覆寫)它,且你對它已有默認定義。
purevirtual函數:你希望derivedclass一定要重新定義(override覆寫)它,你對它没有默認定義。
virtual 函數:你希望derivedclass重新定義(override,覆寫)它,且你對它已有默認定義。
purevirtual函數:你希望derivedclass一定要重新定義(override覆寫)它,你對它没有默認定義。
Inheritance继承with virtual
Template Method
Application framework
Inheritance+Composition 关系下的构造和析构
Delegation(委托)+Inheritance(继承)
Observer
1,A类有委托容器。
2,A类的容器包含一个可以继承的B类。
3,B类可扩展。
4,A类可控制,让B类有需求的来注册,注销。
Composite
1,B类有个容器,可以放左边,可以放右边。
2,搞A类做基类,让左右两边都继承。
3,B类的容器指针指向A类,B类Add控制放左还是放右。
Prototype(Design Patterns Explained Simply)
1,A类创建未知的子类,
2,让B类创建静态自己,
3,B类构造是private,原型放到A类的容器(add),
4, B类clone来实现挂到A类框架,扩展A类(框架)使用。
作者:ayaoko
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。