设计模式之组合实体模式
一.组合实体模式
定义:对象的组成类似于树型结构,组成了"部分-整体"的结构,组成的最小单元有相似性,在更高层次的抽象上。
结构:
1.Component(抽象组件),为叶子节点和树节点提供统一的抽象。
2.Composite(容器构建),在组合对象中表示节点对象,在叶子节点之外的都是该类型的结点。
3.Leaf(叶子构件),在组合对象中表示叶子节点。
类图为:
Component类
import java.util.ArrayList; public abstract class Component { public abstract void Opertion(); //操作 public abstract void Add(Component Child);//添加子节点 public abstract void Remove(int index);//删除节点 public abstract ArrayList<Component> getChild(int index);//获取子节点 }
Leaf类
import java.util.ArrayList; public class Leaf extends Component { private String leafName =null; public Leaf(String leafName) { this.leafName = leafName; } @Override public void Opertion() { System.out.println(leafName+"正在迎风摇摆"); } @Override public void Add(Component Child) { } @Override public void Remove(int index) { } @Override public ArrayList<Component> getChild(int index) { return null; } public String getLeafName() { return leafName; } public void setLeafName(String leafName) { this.leafName = leafName; } }
Composite类---->Trunk
import java.util.ArrayList; public class Trunk extends Component { private String TrunkName; private ArrayList<Component> components =new ArrayList<>(); //多个子节点 public Trunk(String TrunkName) { this.TrunkName = TrunkName; } @Override public void Opertion() { System.out.println(TrunkName+"树干正在抵御秋风"); for (Component component: components) { component.Opertion(); } } @Override public void Add(Component Child) { components.add(Child); } @Override public void Remove(int index) { components.remove(index); } @Override public ArrayList<Component> getChild(int index) { return components; } public String getTrunkName() { return TrunkName; } }
最后运行Main
public class Main { public static void main(String[] args) { Trunk root = new Trunk("树根"); Trunk trunk = new Trunk("主干"); Trunk t1 = new Trunk("第一分支"); Trunk t2 = new Trunk("主分支"); Trunk t3 = new Trunk("第二分支"); Leaf l1 = new Leaf("分叶1"); Leaf l2 = new Leaf("分叶2"); Leaf l3 = new Leaf("分叶3"); Leaf l4 = new Leaf("分叶4"); Leaf l5 = new Leaf("分叶5"); root.Add(t2); t2.Add(t1); t2.Add(t3); t1.Add(l1); t1.Add(l3); t1.Add(l5); t3.Add(l2); t3.Add(l4); root.Opertion(); } }
总结:类似于树型结构,使其部分与整体具有结构上的一致性。
优点:结构简便,使其内部结构透明,对于用户公开
缺点:根节点部分函数未使用。
恐惧源于无知,代码改变世界
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?