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

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

    想表示对象的部分 - 整体 层次结构。

    希望用户忽略可以忽略组合对象和单个对象之间的差距不同,可以统一的使用组合结构中的所有对象。

    呈树形结构。 

    Composite 组合中的对象接口,在通用情况下,实现所有类的通用的默认行为。

    public abstract class Employer {
        public List employers;
        public void printInfo() {
            System.out.println(name);
        }
        public List getEmployers() {
            return this.employers;
        }
        public abstract void add(Employer employer);
        public abstract void delete(Employer employer);
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }

    Leaf 子节点,在组合中表示叶节点对象,叶节点是没有子节点的,所以集合为空。定义节点对象的行为。

    public class Programmer extends Employer {
    
        public Programmer(String name) {
            setName(name);
            employers = null;//没有下属
        }
    
        @Override
        public void add(Employer employer) {
    
        }
    
        @Override
        public void delete(Employer employer) {
    
        }
    }
    Composite 节点管理,存储子节点,和对子节点进行管理和维护的行为方法。
    public class ProjectManager extends Employer {
    
        public ProjectManager(String  name){
            setName(name);
            employers = new ArrayList();
        }
    
        @Override
        public void add(Employer employer) {
            employers.add(employer);
        }
    
        @Override
        public void delete(Employer employer) {
            employers.remove(employer);
        }
    }

     测试

    创建子节点,并添加到管理节点对象上,使用管理对象,统一管理和使用。

     public static void main(String[] args){
            Employer pm = new ProjectManager("项目经理");
            Employer pa = new ProjectAssistant("助理");
            Employer programmer = new Programmer("程序员");
            pm.add(pa);
            pm.add(programmer);
            List<Employer> ems = pm.getEmployers();
            for(Employer em : ems) {
                System.out.println(em.getName());
            }
        }

    通过组合模式,把不同的对象统一起来,并添加到统一的管理对象下,统一管理。可以创建不同的管理对象,通过集合,并在下面继续添加不同的子节点对象。整体呈树形结构排列。

  • 相关阅读:
    归并排序
    汉诺塔系列问题: 汉诺塔II、汉诺塔III、汉诺塔IV、汉诺塔V、汉诺塔VI、汉诺塔VII
    Uncle Tom's Inherited Land
    汉诺塔III
    汉诺塔X
    Frosh Week
    hdu 1007最近点对问题
    POJ1579:Function Run Fun
    Hdu1163 Eddy's digitai Roots(九余数定理)
    放苹果问题
  • 原文地址:https://www.cnblogs.com/xiaohuihui96/p/7145823.html
Copyright © 2011-2022 走看看