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

    组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性。

    Composite好处:
      1.使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关系自己处理的是单个对象还是整个组合结构,这就简化了客户端代码。
      2.更容易在组合体内加入对象部件. 客户端不必因为加入了新的对象部件而更改代码。

    如何使用Composite?
      首先定义一个接口或抽象类,这是设计模式通用方式了,其他设计模式对接口内部定义限制不多,Composite却有个规定,那就是要在接口内部定义一个用于访问和管理Composite组合体的对象们(或称部件Component)

    package com.qinsoft.design;
    
    import java.util.ArrayList;
    import java.util.List;
    
    abstract class Employer
    {
        private String name;
    
        public void setName(String name)
        {
            this.name = name;
        }
    
        public String getName()
        {
            return this.name;
        }
    
        abstract void add(Employer employer);
    
        abstract void delete(Employer employer);
    
        List<Employer> employers;
    
        void printInfo()
        {
            System.out.println(name);
        }
    
        List<Employer> getEmployers()
        {
            return this.employers;
        }
    }
    
    //Leaf
    class Programmer extends Employer
    {
    
        Programmer(String name)
        {
            setName(name);
            employers = null;
        }
    
        void add(Employer employer)
        {
    
        }
    
        void delete(Employer employer)
        {
    
        }
    
    }
    
    class ProjectAssistant extends Employer
    {
    
        ProjectAssistant(String name)
        {
            setName(name);
            employers = null;
        }
    
        void add(Employer employer)
        {
        }
    
        void delete(Employer employer)
        {
        }
    
    }
    
    class Projectmanager extends Employer
    {
        Projectmanager()
        {
            employers = new ArrayList<Employer>();
        }
    
        Projectmanager(String name)
        {
            setName(name);
            employers = new ArrayList<Employer>();
        }
    
        public void add(Employer employer)
        {
            employers.add(employer);
        }
    
        void delete(Employer employer)
        {
            employers.remove(employer);
        }
    }
    
    public class Composite
    {
    
        public static void main(String[] args)
        {
            Employer pm = new Projectmanager();
            Employer pa = new ProjectAssistant("项目助理");
            Employer programer1 = new Programmer("程序员一");
            Employer programer2 = new Programmer("程序员二");
    
            pm.add(pa);
            pm.add(programer2);
    
            List<Employer> ems = pm.getEmployers();
    
            for (Employer em : ems)
            {
                System.out.println(em.getName());
            }
    
        }
    }
  • 相关阅读:
    ES6 Promise 用法转载
    移动端滚动性能优化
    Python之禅
    Day01~15
    Python
    第一章 Java起源
    IMP-00009: 导出文件异常结束 imp
    浏览器访问网页的详细内部过程
    数据库连接池
    连接数据库 六大步骤
  • 原文地址:https://www.cnblogs.com/hnhcc39/p/2866078.html
Copyright © 2011-2022 走看看