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函数,这合理吗

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

相关推荐
fengfuyao98519 分钟前
基于MATLAB的GUI实现人脸检测、眼睛检测以及LBP直方图显示
开发语言·计算机视觉·matlab
蒋星熠22 分钟前
C++零拷贝网络编程实战:从理论到生产环境的性能优化之路
网络·c++·人工智能·深度学习·性能优化·系统架构
CHANG_THE_WORLD36 分钟前
# C++ 中的 `string_view` 和 `span`:现代安全视图指南
开发语言·c++
雨落倾城夏未凉36 分钟前
9.c++new申请二维数组
c++·后端
Franklin1 小时前
Python界面设计【QT-creator基础编程 - 01】如何让不同分辨率图像自动匹配graphicsView的窗口大小
开发语言·python·qt
雨落倾城夏未凉1 小时前
8.被free回收的内存是立即返还给操作系统吗?为什么?
c++·后端
雨落倾城夏未凉1 小时前
6.new和malloc的区别
c++·后端
郝学胜-神的一滴1 小时前
深入理解QFlags:Qt中的位标志管理工具
开发语言·c++·qt·程序人生
柯南二号2 小时前
【Java后端】MyBatis-Plus 原理解析
java·开发语言·mybatis
INS_KF2 小时前
【C++知识杂记2】free和delete区别
c++·笔记·学习