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());
            }
        }

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

  • 相关阅读:
    SQL2005 SQL2008 远程连接配置方法
    Subvision 安装 部署 TortoiseSVN
    在wpf或winform关闭子窗口或对子窗口进行某个操作后刷新父窗口
    C# 中的委托和事件
    长数字隔三位用逗号","隔开,保留两位小数,指定长度,不足补空格
    C# 柱状图, 折线图, 扇形图
    如何在Visual Studio 2010旗舰版本下安装Window Phone 7 简体中文开发环境
    vs2010发布、打包安装程序(超全超详细)
    java 环境搭建
    SQL2008 转 2000(高版本转换到低版本)
  • 原文地址:https://www.cnblogs.com/xiaohuihui96/p/7145823.html
Copyright © 2011-2022 走看看