论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
数据库
›
SqlServer
›
设计模式 组合模式(Composite Pattern)
设计模式 组合模式(Composite Pattern)
缠丝猫
金牌会员
|
2024-9-18 19:57:55
|
显示全部楼层
|
阅读模式
楼主
主题
839
|
帖子
839
|
积分
2517
组合模式简绍
组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的条理结构。组合模式使得客户端可以用一致的方式处置惩罚单个对象和组合对象。如许,可以在不知道对象详细类型的条件下操作对象聚集。
组合模式主要包罗三种角色:
Component(组件):声明一个接口,在适当情况下,此接口被叶节点和容器节点共享。
Leaf(叶节点):定义终端对象。
Composite(容器节点):定义具有子部件的那些部件的举动。存储子部件。 组合模式的应用场景
组合模式的优缺点
组合模式的优点
一致性:客户端可以一致地处置惩罚单个对象和组合对象。
灵活性:可以很容易地添加新的叶子节点或组合节点。
透明性:客户端不须要知道对象的详细类型就可以操作对象。
组合模式的缺点
复杂性:对于简朴操作,组合模式大概会引入不须要的复杂性。
额外开销:组合模式大概会导致额外的内存和 CPU 开销,尤其是在处置惩罚大量对象时
UML图
定义一个公共接口或抽象类,它声明了全部叶子节点和容器节点共有的操作。
package CompositePatternModel;
public interface Component {
void test();
Component getChild(int i);
public void operation();
public void add(Component component);
}
复制代码
实现 Component 接口中定义的操作,但不关心其他与子节点相关的操作。
package CompositePatternModel;
import java.util.ArrayList;
import java.util.List;
public class Composite implements Component{
private String name;
private List<Component> children = new ArrayList<>();
public Composite(String name){
this.name = name;
}
@Override
public void test() {
}
@Override
public Component getChild(int i) {
return children.get(i);
}
@Override
public void operation() {
System.out.println("Composite " + name + " operation");
for (Component c : children) {
c.operation();
}
}
@Override
public void add(Component component) {
children.add(component);
}
}
复制代码
实现 Component 接口中定义的操作,并且实现与子节点相关的操作。客户端可以一致地对待单个对象和组合对象。
package CompositePatternModel;
public class Pattern implements Component{
private String name;
public Pattern(String name){
this.name = name;
}
@Override
public void test() {
System.out.println("test");
}
@Override
public Component getChild(int i) {
System.out.println("getChild");
return null;
}
@Override
public void operation() {
System.out.println("operation: d" + name);
}
@Override
public void add(Component component) {
System.out.println("sdf"+ component);
}
}
复制代码
客户端可以一致地对待单个对象和组合对象。
package CompositePatternModel;
public class Main {
public static void main(String[] args) {
Pattern pattern = new Pattern("pattern1");
Pattern pattern1 = new Pattern("pattern2");
Composite composite = new Composite("Comp");
composite.add(pattern);
composite.add(pattern1);
composite.operation();
}
}
复制代码
表示部分-整体条理结构
当你须要表示一个具有条理结构的对象集适时,组合模式黑白常有效的。这种结构通常包罗多个条理,每个条理上的对象可以是一个独立的实体(叶节点),也可以是一个包罗其他对象的容器(组合节点)。
示例:
文件体系中的目次和文件:目次可以包罗其他目次和文件。
组织结构图:部分可以包罗其他部分或员工。
UI控件:一个复合控件可以包罗其他控件(如面板包罗按钮、文本框等)
透明地处置惩罚单个对象和组合对象
当客户端代码须要以一致的方式处置惩罚单个对象和组合对象时,组合模式可以让客户端无需关心处置惩罚的是单个对象照旧组合对象。
示例:
图形编辑器:图形可以是单独的线条、矩形等基本图形,也可以是由多个基本图形组成的复合图形。
渲染引擎:渲染对象可以是单一的几何体,也可以是由多个几何体组成的复杂场景。
动态地增删对象
当须要在运行时动态地添加或移除对象,并且这些对象大概是单个实体也大概是包罗其他对象的容器时,组合模式可以很好地支持这种需求。
示例:
游戏中的场景管理:游戏场景可以包罗单个游戏对象,也可以包罗其他场景。
UI 界面构建:一个窗口可以包罗多个面板,每个面板又可以包罗多个组件。
须要递归处置惩罚的对象聚集
当须要对一个条理结构举行递归处置惩罚时,组合模式可以简化递归逻辑。
示例:
企业组织结构的遍历:遍历整个公司的部分和员工。
文件体系的遍历:递归地遍历目次和文件。
须要一致的接口
当希望在差别类型的对象之间提供一致的接口时,组合模式可以确保全部的对象(无论是叶子照旧组合节点)都遵循相同的接口定义。
示例:
操作体系中的文件和目次:文件和目次都须要支持读写、删除等操作。
网页中的 DOM 结构:DOM 节点可以是文本节点也可以是包罗其他节点的元素节点。
组合模式提供了一种优雅的方式来组织和操作条理结构中的对象,使得客户端可以在不知道对象详细类型的情况下操作对象聚集。这种模式在许多领域都有广泛的应用,特别是在须要表示条理关系的场景中。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
缠丝猫
金牌会员
这个人很懒什么都没写!
楼主热帖
【设置ssh免密不起作用?彻底搞懂密钥 ...
MySQL 8.0 新特性梳理汇总
【云原生】Docker 进阶 -- 构建自定义 ...
kubernetes之镜像拉取策略ImagePullSec ...
关于身体对内对外感受机制的整理 ...
java如何编写增强for循环呢? ...
用100万的“小报告”扭转老闆的决定— ...
基于C#+unity的2D跑酷闯关对战冒险游戏 ...
关于Servlet的补充知识
SAP各模块优缺点和发展简析
标签云
挺好的
服务器
快速回复
返回顶部
返回列表