Java设计模式之组合模式

Java设计模式之组合模式组合模式定义 将对象组合成树状的层次结构的模式 用来表示 部分 整体 的关系 使用户对单个对象和组合对象具有一致的访问性 组合模式是将对象组合成树状结构 其中树的节点可以是单个对象或对象组合 这样 无论是操作单个对象还是对象组合 都可以使

大家好,欢迎来到IT知识分享网。

组合模式

定义:将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。

组合模式是将对象组合成树状结构,其中树的节点可以是单个对象或对象组合。这样,无论是操作单个对象还是对象组合,都可以使用统一的方式进行操作。组合模式通过定义一个共同的抽象类或接口来表示单个对象和对象组合,从而实现了透明的处理。

特点

优点

  • 组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码;
  • 更容易在组合体内加入新的对象,客户端不会因为加入了新的对象而更改源代码,满足“开闭原则”;

缺点:

  • 设计较复杂,客户端需要花更多时间理清类之间的层次关系;
  • 不容易限制容器中的构件;
  • 不容易用继承的方法来增加构件的新功能;

结构与实现

主要构件如下:

  • 抽象构件:它的主要作用是为树叶构件和树枝构件声明公共接口,并实现它们的默认行为。
  • 叶构件:是组合中的叶节点对象,它没有子节点,用于实现抽象构件角色中 声明的公共接口。
  • 树枝构件:是组合中的分支节点对象,它有子节点。它实现了抽象构件角色中声明的接口,主要作用是存储和管理子部件,通常包含 Add()、Remove()、GetChild() 等方法。

类图如下:

Java设计模式之组合模式

示例代码如下:

Component.java

public interface Component { void add(Component c); void remove(Component c); Component getChild(int i); void operation(); } 

Leaf.java

 private String name; public Leaf(String name) { this.name = name; } @Override public void add(Component c) { } @Override public void remove(Component c) { } @Override public Component getChild(int i) { return null; } @Override public void operation() { System.out.println(MessageFormat.format("树叶[{0}]业务代码执行", name)); } }

Composite.java

public class Composite implements Component { private List<Component> childeren; public Composite() { this.childeren = new ArrayList<Component>(); } @Override public void add(Component c) { childeren.add(c); } @Override public void remove(Component c) { childeren.remove(c); } @Override public Component getChild(int i) { return childeren.get(i); } @Override public void operation() { childeren.forEach(item -> item.operation()); } }

CompositeTest.java

public class CompositeTest { public static void main(String[] args) { Composite composite = new Composite(); Component leafa = new Leaf("A"); Component leafb = new Leaf("B"); Component leafc = new Leaf("C"); composite.add(leafa); composite.add(leafb); composite.add(leafc); composite.operation(); } }

应用场景

在需要表示一个对象整体与部分的层次结构的场合。要求对用户隐藏组合对象与单个对象的不同,用户可以用统一的接口使用组合结构中的所有对象的场合。

​ 将组合模式中的树叶节点和树枝节点进行抽象,也就是说树叶节点和树枝节点还有子节点,这时组合模式就扩展成复杂的组合模式。如 JavaAWT、Swing中就有大量的应用

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/185087.html

(0)
上一篇 2025-08-05 09:20
下一篇 2025-08-05 09:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信