zoukankan      html  css  js  c++  java
  • 设计模式12 组合模式

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

    如图左边是:组合模式;右边是:装饰者模式

    可见组合模式就是装饰者模式的上半部分。

    组合模式的优点有:

    1、组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码;

    2、更容易在组合体内加入新的对象,客户端不会因为加入了新的对象而更改源代码,满足“开闭原则”;

    组件接口:

    1 public interface Component {
    2     public void add(Component component);
    3 
    4     public void remove(Component component);
    5 
    6     public Component getChild(int t);
    7 
    8     public void operation();
    9 }

    树叶元素与组合元素:

     1 public class Leaf implements Component {
     2     private String name;
     3 
     4     public Leaf(String name) {
     5         this.name = name;
     6     }
     7 
     8     @Override
     9     public void add(Component component) {
    10         // TODO Auto-generated method stub
    11 
    12     }
    13 
    14     @Override
    15     public void remove(Component component) {
    16         // TODO Auto-generated method stub
    17 
    18     }
    19 
    20     @Override
    21     public Component getChild(int t) {
    22         // TODO Auto-generated method stub
    23         return null;
    24     }
    25 
    26     @Override
    27     public void operation() {
    28         // TODO Auto-generated method stub
    29         System.out.println("树叶" + name + "被访问");
    30     }
    31 }
    32 
    33 public class Composite implements Component {
    34     private ArrayList<Component> children = new ArrayList<Component>();
    35 
    36     @Override
    37     public void add(Component component) {
    38         // TODO Auto-generated method stub
    39         children.add(component);
    40     }
    41 
    42     @Override
    43     public void remove(Component component) {
    44         // TODO Auto-generated method stub
    45         children.remove(component);
    46     }
    47 
    48     @Override
    49     public Component getChild(int t) {
    50         // TODO Auto-generated method stub
    51         return children.get(t);
    52     }
    53 
    54     @Override
    55     public void operation() {
    56         // TODO Auto-generated method stub
    57         for (Object obj : children) {
    58             ((Component) obj).operation();
    59         }
    60     }
    61 }

    调用方式:

     1 public class Client {
     2     public static void main(String[] args) {
     3         Component c0 = new Composite();
     4         Component c1 = new Composite();
     5         Component leaf1 = new Leaf("1");
     6         Component leaf2 = new Leaf("2");
     7         Component leaf3 = new Leaf("3");
     8         c0.add(leaf1);
     9         c0.add(c1);
    10         c1.add(leaf2);
    11         c1.add(leaf3);
    12         c0.operation();
    13     }
    14 }

    执行结果:

    组合模式是数据结构的体现。

  • 相关阅读:
    测测你是男是女
    密集恐惧症候群测试图
    弱智的我
    你还单纯么
    压力测试
    理性人与感性人
    [家里蹲大学数学杂志]第248期东北师范大学2013年数学分析考研试题
    [家里蹲大学数学杂志]第254期第五届[2013年]全国大学生数学竞赛[数学类]试题
    PostgreSQL中,如何查表属于哪个数据库
    对PostgreSQL中tablespace 与 database, table的理解
  • 原文地址:https://www.cnblogs.com/asenyang/p/12111055.html
Copyright © 2011-2022 走看看