• 组合模式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());
            }
    
        }
    }
  • 相关阅读:
    RestTemplate proxy 设置方式
    一道关于主键,闭包的软考题------关系代数复习-码,范式,闭包求解
    MyBatis的XML中使用内部类的方式
    MyBatis SpringBoot 杂记
    服务器安装笔记
    UML符号
    npm 设置代理
    国外一家代码网站
    设计模式复习
    docker 列出每个容器的IP
  • 原文地址:https://www.cnblogs.com/hnhcc39/p/2866078.html
Copyright © 2020-2023  润新知