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

     
    组合模式(Composite Pattern)
     
    • 何时使用将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 1、您想表示对象的部分-整体层次结构(树形结构)。 2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
    • 如何解决树枝和叶子实现统一接口,接口内部含有叶子属性和 List属性List中组合该接口自身
    • 优点: 1、高层模块调用简单。 2、节点自由增加。
    • 使用场景:部分、整体场景,如:1、树形菜单,文件、文件夹的管理。2、Android中类View可以做为ViewGroup的一部分。组合模式使得用户对单个对象View和组合对象ViewGroup的使用具有一致性。
     
    例子:
    Employee(单个叶子)中含有单个Employee的自身属性一个List<Employee> subordinates(树枝/集合),单个对象Employee和组合对象List<Employee> subordinates的使用具有统一管理接口Employee
    1. publicclassCompositePatternDemo{
    2.    publicstaticvoid main(String[] args){
    3.       Employee CEO =newEmployee("John","CEO",30000);
    4.  
    5.       Employee headSales =newEmployee("Robert","Head Sales",20000);
    6.  
    7.       Employee headMarketing =newEmployee("Michel","Head Marketing",20000);
    8.  
    9.       Employee clerk1 =newEmployee("Laura","Marketing",10000);
    10.       Employee clerk2 =newEmployee("Bob","Marketing",10000);
    11.  
    12.       Employee salesExecutive1 =newEmployee("Richard","Sales",10000);
    13.       Employee salesExecutive2 =newEmployee("Rob","Sales",10000);
    14.  
    15.       CEO.add(headSales);
    16.       CEO.add(headMarketing);
    17.  
    18.       headSales.add(salesExecutive1);
    19.       headSales.add(salesExecutive2);
    20.  
    21.       headMarketing.add(clerk1);
    22.       headMarketing.add(clerk2);
    23.  
    24.       //打印该组织的所有员工
    25.       System.out.println(CEO);
    26.       for(Employee headEmployee : CEO.getSubordinates()){
    27.          System.out.println(headEmployee);
    28.          for(Employee employee : headEmployee.getSubordinates()){
    29.             System.out.println(employee);
    30.          }
    31.       }       
    32.    }
    33. }
     
    1. import java.util.ArrayList;
    2. import java.util.List;
    3.  
    4. publicclassEmployee{
    5.    privateString name;
    6.    privateString dept;
    7.    privateint salary;
    8.    privateList<Employee> subordinates;
    9.  
    10.    //构造函数
    11.    publicEmployee(String name,String dept,int sal){
    12.       this.name = name;
    13.       this.dept = dept;
    14.       this.salary = sal;
    15.       subordinates =newArrayList<Employee>();
    16.    }
    17.  
    18.    publicvoid add(Employee e){
    19.       subordinates.add(e);
    20.    }
    21.  
    22.    publicvoid remove(Employee e){
    23.       subordinates.remove(e);
    24.    }
    25.  
    26.    publicList<Employee> getSubordinates(){
    27.      return subordinates;
    28.    }
    29.  
    30.    publicString toString(){
    31.       return("Employee :[ Name : "+ name
    32.       +", dept : "+ dept +", salary :"
    33.       + salary+" ]");
    34.    }  
    35. }
     
     
     
     



  • 相关阅读:
    新居博客园
    关于 php mysql pdo cannot find driver 解决方案
    centos 升级 python后 python-setuptools pip 安装依赖报错
    php解密java的DES加密
    关于jquery html()方法获取带有OBJECT标签的元素内容时,出现“类型不匹配。”的解决办法
    文字过长 用 ... 表示 CSS实现单行、多行文本溢出显示省略号
    PhpStorm WebMatrix xDebug 配置开发环境
    IntelliJ IDEA自用快捷键 转载
    我的团队开发活动
    mysql常用总结
  • 原文地址:https://www.cnblogs.com/Doing-what-I-love/p/5621182.html
Copyright © 2011-2022 走看看