ToB企服应用市场:ToB评测及商务社交产业平台

标题: 设计模式 组合模式(Composite Pattern) [打印本页]

作者: 缠丝猫    时间: 2024-9-18 19:57
标题: 设计模式 组合模式(Composite Pattern)
组合模式简绍

组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的条理结构。组合模式使得客户端可以用一致的方式处置惩罚单个对象和组合对象。如许,可以在不知道对象详细类型的条件下操作对象聚集。
组合模式主要包罗三种角色:


组合模式的优缺点

组合模式的优点


组合模式的缺点


UML图


定义一个公共接口或抽象类,它声明了全部叶子节点和容器节点共有的操作。
  1. package CompositePatternModel;
  2. public interface Component {
  3.     void test();
  4.     Component getChild(int i);
  5.     public void operation();
  6.     public void add(Component component);
  7. }
复制代码
实现 Component 接口中定义的操作,但不关心其他与子节点相关的操作。
  1. package CompositePatternModel;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class Composite implements Component{
  5.     private String name;
  6.     private List<Component> children = new ArrayList<>();
  7.     public Composite(String name){
  8.         this.name = name;
  9.     }
  10.     @Override
  11.     public void test() {
  12.     }
  13.     @Override
  14.     public Component getChild(int i) {
  15.         return children.get(i);
  16.     }
  17.     @Override
  18.     public void operation() {
  19.         System.out.println("Composite " + name + " operation");
  20.         for (Component c : children) {
  21.             c.operation();
  22.         }
  23.     }
  24.     @Override
  25.     public void add(Component component) {
  26.         children.add(component);
  27.     }
  28. }
复制代码
实现 Component 接口中定义的操作,并且实现与子节点相关的操作。客户端可以一致地对待单个对象和组合对象。
  1. package CompositePatternModel;
  2. public class Pattern implements  Component{
  3.     private String name;
  4.     public Pattern(String name){
  5.         this.name = name;
  6.     }
  7.     @Override
  8.     public void test() {
  9.         System.out.println("test");
  10.     }
  11.     @Override
  12.     public Component getChild(int i) {
  13.         System.out.println("getChild");
  14.         return null;
  15.     }
  16.     @Override
  17.     public void operation() {
  18.         System.out.println("operation: d" + name);
  19.     }
  20.     @Override
  21.     public void add(Component component) {
  22.         System.out.println("sdf"+ component);
  23.     }
  24. }
复制代码
客户端可以一致地对待单个对象和组合对象。
  1. package CompositePatternModel;
  2. public class Main {
  3.     public static void main(String[] args) {
  4.         Pattern pattern = new Pattern("pattern1");
  5.         Pattern pattern1 = new Pattern("pattern2");
  6.         Composite composite = new Composite("Comp");
  7.         composite.add(pattern);
  8.         composite.add(pattern1);
  9.         composite.operation();
  10.     }
  11. }
复制代码
示例:
操作体系中的文件和目次:文件和目次都须要支持读写、删除等操作。
网页中的 DOM 结构:DOM 节点可以是文本节点也可以是包罗其他节点的元素节点。
组合模式提供了一种优雅的方式来组织和操作条理结构中的对象,使得客户端可以在不知道对象详细类型的情况下操作对象聚集。这种模式在许多领域都有广泛的应用,特别是在须要表示条理关系的场景中。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4