• (@WhiteTaken)设计模式学习——组合模式


    下面来学习一下组合模式。

    组合模式概念是什么呢。从别的地方抄来了一些理论。

    理论:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。

    拙见:组合模式就是为处理树形结构优化出来的一套理论方法。-_-!!!用递归可以统一处理树形结构中的对象。

    下面直接上代码。

    总公司  --分公司

              --分公司下属分公司

              --分公司下属办事处

           --分公司办事处

    接口类ICompany。

    1 import java.util.List;
    2 
    3 public interface ICompany {
    4     public void display();
    5     public boolean add(ICompany company);
    6     public boolean remove(ICompany company);
    7     public List<ICompany> getChild();
    8 }

     公司类Company。

     1 import java.util.ArrayList;
     2 import java.util.List;
     3 
     4 public class Company implements ICompany {
     5     private String name;
     6     private List<ICompany> children;
     7     
     8     public Company(String name) {
     9         this.name = name;
    10         this.children = new ArrayList<ICompany>();
    11     }
    12     @Override
    13     public void display() {
    14         System.out.println(name);
    15     }
    16     @Override
    17     public boolean add(ICompany company) {
    18         return children.add(company);
    19     }
    20     @Override
    21     public boolean remove(ICompany company) {
    22         return children.remove(company);
    23     }
    24     @Override
    25     public List<ICompany> getChild() {
    26         return children;
    27     }
    28 }

    办事处类ConcreteCompany。

     1 import java.util.ArrayList;
     2 import java.util.List;
     3 
     4 public class ConcreteCompany implements ICompany {
     5     private String name;
     6     
     7     public ConcreteCompany(String name) {
     8         this.name = name;
     9     }
    10     @Override
    11     public void display() {
    12         System.out.println(name);
    13     }
    14     @Override
    15     public boolean add(ICompany company) {
    16         return false;
    17     }
    18     @Override
    19     public boolean remove(ICompany company) {
    20         return false;
    21     }
    22     @Override
    23     public List<ICompany> getChild() {
    24         return null;
    25     }
    26 }

    测试类MainClass。

     1 import java.util.List;
     2 
     3 /*
     4  * 组合模式测试
     5  */
     6 public class MainClass {
     7     public static void main(String[] args) {
     8         ICompany company = new Company("总公司");
     9         ICompany company1 = new Company("分公司1");
    10         ICompany company2 = new Company("分公司2");
    11         ICompany company3 = new ConcreteCompany("分公司办事处");
    12         company.add(company1);
    13         company.add(company2);
    14         company.add(company3);
    15         
    16         ICompany company11 = new Company("分公司1下属公司1");
    17         ICompany company12 = new Company("分公司1下属公司2");
    18         ICompany company13 = new ConcreteCompany("分公司1下属办事处");
    19         company1.add(company11);
    20         company1.add(company12);
    21         company1.add(company13);
    22         
    23         ICompany company21 = new Company("分公司2下属公司");
    24         ICompany company22 = new ConcreteCompany("分公司2下属办事处");
    25         company2.add(company21);
    26         company2.add(company22);
    27         
    28         displayAllCompany(company, 0);
    29     }
    30 
    31     private static void displayAllCompany(ICompany rootCompany, int deep) {
    32         for(int i = 0; i < deep; i++)
    33         {
    34             System.out.print("-");
    35         }
    36         rootCompany.display();
    37         List<ICompany> children = rootCompany.getChild();
    38         for(ICompany company:children)
    39         {
    40             if(company instanceof ConcreteCompany)
    41             {
    42                 for(int i = 0; i <= deep; i++)
    43                 {
    44                     System.out.print("-");
    45                 }
    46                 company.display();
    47             }
    48             else
    49             {
    50                 displayAllCompany(company, deep + 1);
    51             }
    52         }
    53         
    54     }
    55 }

    以上代码主要就是用递归方法遍历了公司的结构。

    测试结果。

    这个模式的精华都在代码里,大家自己体会吧。。。共同进步!!!

  • 相关阅读:
    个人兴趣与公司业务的关系
    分析能力的8个等级(转)
    DSL应用的优点
    架构师应具备的概要技能
    Cheetah
    不能运行VS2005的DSL Tool例子
    推荐:原型工具GUI Design Studio
    Viewpoints 1.0 for Visual Studio .NET 2008
    原创故事 - 不死鸡和不死牛的故事
    Antlr构建表达式引擎
  • 原文地址:https://www.cnblogs.com/WhiteTaken/p/7707416.html
Copyright © 2020-2023  润新知