设计模式.组合模式(整体和部分关系, 树和Node,透明组合和完全组合)

article/2025/10/26 12:02:40

抽象角度看

一棵树有很多节点,根据位置可以分为:根节点,中间节点,叶子节点

所有的节点都是树节点

这两句话转换为代码就是: 你可以有三个Node类,RootNode,TempNode,LeafNode。当然这三个都是TreeNode的子节点。实际使用中完全可以用一个TreeNode来实现,也可以拆分为三个。

1. 只用一个TreeNode节点,就是:透明组合模式(推荐)

2. 拆分为三个节点来用,就是:完全租户模式

定义

组合模式(Composite Pattern):组合多个对象形成树形结构,以表示具有整体部分关系的层次结构,使客户端可以统一的对待单个对象和组合对象。

组合模式又称部分-整体模式。

树结构

结构示例:

 每个数字所处的位置都抽象为一个节点Node

节点分为:根节点,叶子节点,中间节点

  1. 根节点:没有父节点,有子节点
  2. 中间节点:有父节点,也有子节点
  3. 叶子节点:没有子节点,有父节点

节点操作方法分为:获取父节点;添加子节点;自己的操作

结合上面节点分类和操作分类节点结构如下:

 

问题:

  1. 子节点列表要不要放在接口里呀 ?
  2. 那些有区别的操作要不要放在接口里呀 ?

透明组合模式&完全组合模式

1.按照 不同操作的方法 放置的位置不同,分为:透明组合模式和安全组合模式。

2. 透明组合模式:所有节点一样,都是大而全的方法集合,在子类中区别就是

叶子节点不实现add/getChild方法

3. 完全组合模式:将有区别的操作方法声明放在抽象节点Node中,调用的时候自己区别对待。大家都实现一个接口,但叶子节点不包括:add/getChild方法,只有自己的方法。

4. 怎么就透明了&怎么就安全了:

安全是针对透明组合模式中,叶子节点也有和非叶子节点一样的方法,客户端不注意就会调用,所以就不安全。安全模式因为叶子节点就没有Add和GetChild方法,所以根本不会调用。

但是,构建树的时候会将叶子和非叶子节点都看成一样的,都实现同一个接口。但操作的时候就得判断是否叶子节点,否则在转换为非叶子节点时就会丢失东西。

5. 两种模式的选择:

对于合成模式而言,在安全性和透明性上,会更看重透明性,毕竟合成模式的目的是:让客户端不再区分操作的是树枝对象还是树叶对象,而是以一个统一的方式来操作。

而且对于安全性的实现,需要区分是树枝对象还是树叶对象。有时候,需要将对象进行类型转换,却发现类型信息丢失了,只好强行转换,这种类型转换必然是不够安全的。

因此在使用合成模式的时候,建议多采用透明性的实现方式。 

透明组合模式

 

安全组合模式

UML

组合和聚合区别

聚合一般用子对象来实现,即:一个对象是另外一个对象的属性。比如team和成员之间,大家聚在一块

组合是采用继承来实现,或者采用业务逻辑上的组合,你不单独创建零部件的租即可。零件组成一个机器,单独零件不具有使用特征

设计模式中的组合模式,类似UML中的聚合的实现方式,但不能等同,毕竟是两个概念。


http://chatgpt.dhexx.cn/article/Wfj1qDaT.shtml

相关文章

HINSTANCE (句柄相关)

在win32下与HMODULE是相同的东西,在Win32下还存在主要是因为win16   程序使用HINSTANCE来区别task。   区别:   Handle 是代表系统的内核对象,如文件句柄,线程句柄,进程句柄。   HMODULE 是代表应用程序载入的…

为什么需要传递HINSTANCE给CreateWindow?

Win32中有两个API函数,CreateWindow和RegisterClass。它们有一个HINSTANCE参数,很多人对这个参数不是很理解,今天就来讲一讲。 窗口类的名称还不足以唯一地确定这个窗口类。每一个进程都会拥有它自己的窗口类列表,而在这个列表中…

HINSTANCE数据类型

作者:马 岩(Furzoom) (http://www.cnblogs.com/furzoom/)版权声明:本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接,未经作者同意请不要删除此段声明,感谢…

【引用】HINSTANCE

在win32下与HMODULE是相同的东西,在Win32下还存在主要是因为win16 程序使用HINSTANCE来区别task。 区别: Handle 是代表系统的内核对象,如文件句柄,线程句柄,进程句柄。 HMODULE 是代表应用程序载入的模块,…

hInstance是什么参数?

熟悉C编程的人都知道main函数带有2个参数:arc和argv,完整的main函数定义是:int main(int argc, char *argv[])。argc指示程序启动时命令行参数的个数,argv则包含具体的参数字符串。 如果有程序叫“hello.exe”,直接启动…

hInstance是什么参数

熟悉C编程的人都知道main函数带有2个参数:arc和argv,完整的main函数定义是:int main(int argc, char *argv[])。argc指示程序启动时命令行参数的个数,argv则包含具体的参数字符串。 如果有程序叫“hello.exe”,直接启…

外卖小程序邀请入口获取推广路径

外卖小程序邀请入口 饿了么小程序邀请入口 1.手机应用商城搜索 淘宝联盟app,让后下载,登录建议直接选淘宝登录,让后按照下图的步揍即可. 淘宝联盟APP获取推广appid和path的地方,这是两个不同的每日红包。 2.另外饿了么小程序里面有个邀请有礼的,通过上…

万能门店小程序可diy完整前后端源码

这个是一位朋友付费分享的万能门店小程序,听他说功能挺强大的,功能也挺全面的。 有必须提醒一下:小程序代码分为前端和后端。 前端代码:例如:用“微信开发者工具”上传至微信官方审核就可以了。 后端代码&#xff1…

uniapp 生成微信小程序码

第一步创建一个容器&#xff0c;展示图片 <view style"margin: 49rpx auto;width: 300rpx;height: 300rpx;"><image :src"maskData" style"width: 100%;" longtap"longtap"></image> </view> 功能是&#x…

微信小程序的推广思路与方法,详细思路解析

简单来说&#xff0c;小程序就是微信上的APP&#xff0c;它内生于微信&#xff0c;坐享10亿流量&#xff0c;而且不需要下载安装即可使用的应用&#xff0c;它实现了应用“触手可及”的梦想&#xff0c;用户扫一扫或者搜一下即可打开应用。今天&#xff0c;我们就来看一看微信小…

替你发优惠券,为了推广小程序微信真是豁出去了

微信iOS 6.6.6版本上线了! 虽然App Store的新功能里,只写了“可保留未编辑完的朋友圈”。但心细如发的道爷依然发现几大重要更新,解决的痛点,必将让10亿用户为之小嗨一把,小程序也迎来了新的春天!另外,安卓版已经正式上线了! 微趋道,就是小程序 本次主要更新了以下内…

小程序介绍

1. 小程序介绍 微信小程序&#xff0c;简称小程序&#xff0c;英文名 Mini Program &#xff0c;是一种不需要下载安装即可使用的应用&#xff0c;它实现 了应用“触手可及”的梦想&#xff0c;用户扫一扫或搜一下即可打开应用 1.1 为什么是微信小程序&#xff1f; 微信有海…

小程序快速推广方法,你知道多少?

很多人觉得小程序的风口已经过去&#xff0c;其实不然&#xff01;就从这次疫情看&#xff0c;很多平时只做线下的大型餐饮店&#xff0c;都开始上线外卖平台&#xff0c;如果品牌具有一定规模的话&#xff0c;比起依托第三方的外卖平台&#xff0c;肯定是开发自己的小程序性价…

视频号推广小程序是什么;助你快速引流变现;丨国仁网络资讯

目前微信已经退出了视频号推广小程序,但对于大多数创作者来说还不知道它是干啥的。视频号推广小程序可以比喻视频号“dou+”, 它是腾讯官方专门为视频号博主打造的,以推广视频号内容为主,主要针对三个方向:基础定向投放,可以限定性别、年龄、地域的人群;投放指定账号的粉…

如何快速推广微信小程序,并通过微信小程序赚取睡后收入

微信小程序的搭建&#xff1a; 1、使用邮箱注册微信小程序帐号。 2、完善小程序主体。个人认为小程序的名称以及图标很重要。名称要言简意干&#xff0c;让用户根据名称就能知道小程序是做什么的。图标要简洁、清爽&#xff0c;并且符合主题。 3、开发小程序。自己具有开发能…

获取小程序appid和path教程详细版

打开你需要获取appid的小程序&#xff0c;这里以“饿了么”小程序为例&#xff0c;然后点击右上角的图标 以下为小程序path获取方法 登录你的小程序的微信公众平台https://mp.weixin.qq.com点击右上角的工具&#xff0c;进入后是下面的页面 然后用你输入的微信号微信浏览“饿了…

微信小程序实现展示图片(图片推广小程序可以使用)

实现效果图&#xff1a; 首先就是这个封面是一些图片展示界面&#xff0c;后台返回的都是图片。然后根据返回数据数组的下标进行分类&#xff0c;第一排只显示数组为1&#xff0c;4&#xff0c;7一次类推&#xff0c;第二列是2&#xff0c;5&#xff0c;8的index&#xff0c;第…

微信公众号如何推广自己的小程序以及操作步骤

微信公众号如何推广自己的小程序以及操作步骤 在使用微信公众号推广自己的小程序之前&#xff0c;首先要关联您的小程序。操作步骤如下&#xff1a; 微信公众号如何绑定自己的小程序的第一步&#xff0c;点微信公众号后台的左侧里有个小程序管理&#xff0c; 第二步&#xff…

如何在大学推广小程序?

如何在大学推广你的小程序&#xff1f; 最近是开学季&#xff0c;对于小程序运营者来说&#xff0c;这又是小程序推广的一个较佳时期。为什么这样说呢&#xff1f;在这之前&#xff0c;我们先来看一句话&#xff1a;利用用户关系链进行小程序的裂变传播能够最大程度曝光小程序。…

小程序推广有几种方式?小程序运营有什么步骤?

目前&#xff0c;微信小程序已经成为越来越多企业进行拓客推广的方式&#xff0c;但如何推广、如何引流成为不少企业需要思考的难题。小程序使用便捷&#xff0c;但也需要了解小程序的特性及推广方式&#xff0c;才能更好地进行运营。小程序有哪些入口&#xff1f;企业可以通过…