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

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

相关推荐
m0_6174939410 小时前
Python OpenCV 孔洞检测与缺陷分析详解与实战
开发语言·python·opencv
hsg7711 小时前
简述:Rust、GeoRust、自主研发GIS平台
开发语言·后端·rust
承渊政道11 小时前
飞算Java炫技赛:Java×Unity数字孪生园区平台的从零落地记录
java·开发语言·unity·技术分享·vibe coding·飞算javaai·飞算java ai炫技赛
不负岁月无痕11 小时前
STL --C++哈希表封装unordered_map/set
c++·visualstudio·哈希算法·散列表·unordered
wdfk_prog17 小时前
嵌入式面试真题第 10 题:高优化等级下共享状态可见性、内存模型与系统级同步设计
java·linux·开发语言·面试·职场和发展·架构·c
闻道且行之20 小时前
TurboOCR:基于PP-OCRv6的极速Windows离线OCR工具,深度解析3.4GB依赖背后的技术架构
c++·人工智能·python·qt·机器学习·ocr
许彰午21 小时前
95_Python内存管理与垃圾回收
开发语言·python
多加点辣也没关系21 小时前
JavaScript|第13章:原始类型的方法
开发语言·javascript·ecmascript
এ慕ོ冬℘゜21 小时前
深入理解 JavaScript 事件体系:Window、鼠标与键盘事件详解
开发语言·javascript·okhttp
c238561 天前
Bug 猎手入门指南
c++·算法·bug