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());
            }
    
        }
    }
  • 相关阅读:
    二维码的生成细节和原理【转】
    ASP.NET中的Session怎么正确使用
    Application,Session,Cookie,ViewState和Cache区别
    为什么 Rust 连续三年成为最受欢迎的语言
    《预见2050》:科技也很燃
    财讯传媒集团首席战略官段永朝:AI等技术将带来认知重启
    福特第三代自动驾驶在美开启公开道路测试
    2019百度AI开发者大会,百度华为将宣布大消息
    全球负载最大吨位搬运机器人在中国诞生
    selenium webdriver python 开始
  • 原文地址:https://www.cnblogs.com/hnhcc39/p/2866078.html
Copyright © 2011-2022 走看看