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. }
     
     
     
     



  • 相关阅读:
    UIButton的遍历
    UIbutton 圆角和边线
    UIbutton 和UIview 切单角
    为运行Microsoft Dynamics CRM 异步处理服务指定账户没有性能计数器权限
    转:细说ASP.NET Windows身份认证
    CRM 模拟用户
    CRM 2016 Get IOrganizationService
    模拟SQL用户 EXECUTE AS USER
    Calling Custom Actions from JavaScript
    processjs Documentation
  • 原文地址:https://www.cnblogs.com/Doing-what-I-love/p/5621182.html
Copyright © 2011-2022 走看看