C++ 组合 委托 继承 组合使用

本文讨论了C++中继承和组合的关系,涉及构造和析构顺序,以及观察者模式和组合模式的应用。通过实例说明如何在设计一个窗口系统或文件系统时利用组合模式,以及原型模式在未知子类创建中的使用。
摘要由CSDN通过智能技术生成

 关于组合和委托看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函数,这合理吗

答:合理,想要使用这个框架,一定得有相应开销。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值