关于组合和委托看C++中的组合,委托和继承 - 知乎 (zhihu.com)
继承和组合关系下的构造和析构
还有一种情况
构造函数由内到外,析构由外到内。
委托和继承关系组合
设计模式-观察者模式(Observer)
如下图左边,文件只有一份,窗口有4个,4个窗户在看同一东西。一个变化其它都要变化
右边有3种不同view,同样的一个变化其它条状图什么的也要变化。
Observer被其它类继承。如下图左边是相同的Observer子类有4个,右边是不同的Observer子类有3个
委托相关设计
设计模式-组合模式(Composite)
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。
**意图:**将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
**主要解决:**它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
何时使用: 1、您想表示对象的部分-整体层次结构(树形结构)。 2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
**如何解决:**树枝和叶子实现统一接口,树枝内部组合该接口。
以上截自菜鸟教程
情景:
设计一个窗口系统,大窗口中有小窗口,小窗口中可能还有小窗口
或是一个文件系统,目录里可以放文件,也可以放目录
Component有子类Primitive和Composite,Primitive放单体(如文件系统中的文件),Composite组合物(容纳多个单体以及其它组合物),Composite中使用了委托,存了父类Component指针的数组
设计模式-原型模式(Prototype)
情景:需要一个树状继承体系,想要创建未来才会出现的子类,但无法得知子类名称,不知道如何new。
如图上面是框架,下面的子类是未来才会出现(客户买去新创建的的)。让下面的子类创建自己,让上面的框架有办法看见子类创建的原型,并复制,就等于使用父类创建了。
如图LandSatImage类中有静态对象_LSAT(图中有**_**说明是静态对象),这是创造了自己(原型)。
创建自己时会调用private构造函数(图中-号表示私有,#号表示protected,+号public),私有的构造函数会调用addPrototype函数(父类函数),会把得到的指针放到父类数组中。
子类还要覆写一个clone函数,return new LandSatImage,这样父类就可以通过数组中存放的原型来新建子类对象。
疑问:clone用静态函数不也可以吗
答:不行,因为静态函数需要ClassName,但我们并不清楚未来的ClassName。
问题:子类必须构造静态对象,clone函数,这合理吗
答:合理,想要使用这个框架,一定得有相应开销。