• 【结构型模式】《大话设计模式》——读后感 (14)分公司=一部门?——组合模式


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

     Company:

    package com.sjmx.composite;
    
    public abstract class Company {
    
        private String name;
    
        public Company(String name) {
            this.name = name;
        }
    
        public Company() {
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        protected abstract void add(Company company);
    
        protected abstract void romove(Company company);
    
        protected abstract void display(int depth);
    
    }

    叶子节点:

    package com.sjmx.composite;
    
    public class LeafCompany extends Company {
    
        public LeafCompany() {
        }
    
        public LeafCompany(String name) {
            super(name);
        }
    
        @Override
        protected void add(Company company) {
    
        }
    
        @Override
        protected void romove(Company company) {
    
        }
    
        @Override
        protected void display(int depth) {
            StringBuilder sb = new StringBuilder("");
            for (int i = 0; i < depth; i++) {
                sb.append("-");
            }
            System.out.println(new String(sb) + this.getName());
    
        }
    
    }

    直属节点:

    package com.sjmx.composite;
    
    public class HRDepartment extends Company {  
        
        
        public HRDepartment(){}  
          
        public HRDepartment(String name){  
            super(name);  
        }  
          
        @Override  
        protected void add(Company company) {  
      
        }  
      
        @Override  
        protected void display(int depth) {  
            StringBuilder sb = new StringBuilder("");  
            for (int i = 0; i < depth; i++) {  
                sb.append("-");   
            }  
            System.out.println(new String(sb) + this.getName() ) ;   
        }  
      
        @Override  
        protected void romove(Company company) {}  
          
    }  

    树干节点:

    package com.sjmx.composite;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class ConcreteCompany extends Company {  
        private List<Company> cList;  
      
        public ConcreteCompany() {  
            cList = new ArrayList<Company>();  
        }  
      
        public ConcreteCompany(String name) {  
            super(name);   
            cList = new ArrayList<Company>() ;   
        }  
      
        @Override  
        protected void add(Company company) {  
            cList.add(company);  
        }  
      
        @Override  
        protected void display(int depth) {  
            StringBuilder sb = new StringBuilder("");  
            for (int i = 0; i < depth; i++) {  
                sb.append("-");   
            }  
            System.out.println(new String(sb) + this.getName());  
            for (Company c : cList) {  
                c.display(depth + 4);  
            }  
        }  
      
        @Override  
        protected void romove(Company company) {  
            cList.remove(company);  
        }  
    }  

    客户端:

    package com.sjmx.composite;
    
    public class Client {
        /** 
         * @param args 
         */  
        public static void main(String[] args) {  
            Company root = new ConcreteCompany();  
            root.setName("北京总公司");  
            root.add(new HRDepartment("总公司人力资源部"));  
            root.add(new ConcreteCompany("总公司财务部"));  
            
            Company shandongCom = new ConcreteCompany("山东分公司");  
            shandongCom.add(new HRDepartment("山东分公司人力资源部"));  
            shandongCom.add(new ConcreteCompany("山东分公司账务部"));  
            
            Company zaozhuangCom = new ConcreteCompany("枣庄办事处");  
            zaozhuangCom.add(new ConcreteCompany("枣庄办事处财务部"));  
            zaozhuangCom.add(new HRDepartment("枣庄办事处人力资源部"));  
            
            Company jinanCom = new ConcreteCompany("济南办事处");  
            jinanCom.add(new ConcreteCompany("济南办事处财务部"));  
            jinanCom.add(new HRDepartment("济南办事处人力资源部"));   
            
            shandongCom.add(jinanCom);  
            shandongCom.add(zaozhuangCom);  
            
            
            Company huadongCom = new ConcreteCompany("上海华东分公司");  
            huadongCom.add(new HRDepartment("上海华东分公司人力资源部"));  
            huadongCom.add(new ConcreteCompany("上海华东分公司账务部")); 
            
            Company hangzhouCom = new ConcreteCompany("杭州办事处");  
            hangzhouCom.add(new ConcreteCompany("杭州办事处财务部"));  
            hangzhouCom.add(new HRDepartment("杭州办事处人力资源部"));
            
            Company nanjingCom = new ConcreteCompany("南京办事处");  
            nanjingCom.add(new ConcreteCompany("南京办事处财务部"));  
            nanjingCom.add(new HRDepartment("南京办事处人力资源部")); 
            
            huadongCom.add(hangzhouCom);  
            huadongCom.add(nanjingCom); 
            
            root.add(shandongCom);  
            root.add(huadongCom);  
            
            
            root.display(0);  
        }  
    }

    运行结果:

    北京总公司
    ----总公司人力资源部
    ----总公司财务部
    ----山东分公司
    --------山东分公司人力资源部
    --------山东分公司账务部
    --------济南办事处
    ------------济南办事处财务部
    ------------济南办事处人力资源部
    --------枣庄办事处
    ------------枣庄办事处财务部
    ------------枣庄办事处人力资源部
    ----上海华东分公司
    --------上海华东分公司人力资源部
    --------上海华东分公司账务部
    --------杭州办事处
    ------------杭州办事处财务部
    ------------杭州办事处人力资源部
    --------南京办事处
    ------------南京办事处财务部
    ------------南京办事处人力资源部
  • 相关阅读:
    java基础(4)--javadoc文档与命令
    java基础(3)--pulic class与class的区别
    java基础(2)--main方法讲解
    java基础(1)--注释
    shell 测试文件状态运算符
    shell 算术运算符
    linux free命令详解
    shell 基本语法
    linux vim编辑器优化
    linux shell介绍
  • 原文地址:https://www.cnblogs.com/chen1-kerr/p/7197889.html
Copyright © 2020-2023  润新知