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

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

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

相关推荐
你怎么知道我是队长6 小时前
C语言---枚举变量
c语言·开发语言
李慕婉学姐6 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
吃茄子的猫6 小时前
quecpython中&的具体含义和使用场景
开发语言·python
云栖梦泽6 小时前
易语言中小微企业Windows桌面端IoT监控与控制
开发语言
数据大魔方6 小时前
【期货量化实战】日内动量策略:顺势而为的短线交易法(Python源码)
开发语言·数据库·python·mysql·算法·github·程序员创富
fpcc7 小时前
C++编程实践——链式调用的实践
c++
Edward.W8 小时前
Python uv:新一代Python包管理工具,彻底改变开发体验
开发语言·python·uv
小熊officer8 小时前
Python字符串
开发语言·数据库·python
月疯8 小时前
各种信号的模拟(ECG信号、质谱图、EEG信号),方便U-net训练
开发语言·python
荒诞硬汉8 小时前
JavaBean相关补充
java·开发语言