美文网首页
结构型模式-组合模式

结构型模式-组合模式

作者: 一直想上树的猪 | 来源:发表于2019-07-22 09:39 被阅读0次

概述

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

适用性

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

2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

参与者

1.Component
为组合中的对象声明接口。
在适当的情况下,实现所有类共有接口的缺省行为。
声明一个接口用于访问和管理Component的子组件。
(可选)在递归结构中定义一个接口,用于访问一个父部件,并在合适的情况下实现它。

2.Leaf
在组合中表示叶节点对象,叶节点没有子节点。
在组合中定义节点对象的行为。

3.Composite
定义有子部件的那些部件的行为。
存储子部件。
在Component接口中实现与子部件有关的操作。

4.Client
通过Component接口操纵组合部件的对象。

类图

组合模式

代码实现

1.Component
public abstract class Employer {

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

    public Programmer(String name) {
        setName(name);
        employers = null;//程序员, 表示没有下属了
    }

    public void add(Employer employer) {
        
    }

    public void delete(Employer employer) {
        
    }
}

public class ProjectAssistant extends Employer {

    public ProjectAssistant(String name) {
        setName(name);
        employers = null;//项目助理, 表示没有下属了
    }

    public void add(Employer employer) {
        
    }

    public void delete(Employer employer) {
        
    }
}

3.Composite
public class ProjectManager extends Employer {
    
    public ProjectManager(String name) {
        setName(name);
        employers = new ArrayList();
    }
    
    public void add(Employer employer) {
        employers.add(employer);
    }

    public void delete(Employer employer) {
        employers.remove(employer);
    }
}
4.Client
public class Test {

    public static void main(String[] args) {
        Employer pm = new ProjectManager("项目经理");
        Employer pa = new ProjectAssistant("项目助理");
        Employer programmer1 = new Programmer("程序员一");
        Employer programmer2 = new Programmer("程序员二");
        
        pm.add(pa);//为项目经理添加项目助理
        pm.add(programmer2);//为项目经理添加程序员
        
        List ems = pm.getEmployers();
        for (Employer em : ems) {
            System.out.println(em.getName());
        }
    }
}
5.执行结果
项目助理
程序员二

相关文章

  • 设计模式分类汇总

    结构型 适配器模式 组合模式 桥接模式 代理模式 装饰者模式 门面模式 享元模式 行为型 责任链模式 命令模式 解...

  • 设计模式:组合模式 职责链模式

    组合模式 职责链模式 组合模式 组合模式将对象组合成树形结构,以表示“部分-整体”的层次结构。 在组合模式的树形结...

  • 结构型模式:组合模式

    文章首发:结构型模式:组合模式 七大结构型模式之三:组合模式。 简介 姓名 :组合模式 英文名 :Composit...

  • 设计模式笔记(10)--组合模式

    组合模式--类似树结构 GOF对组合模式的定义是:“将对象组合成树形结构以表示“部分-整体”的层次结构。”组合模式...

  • java23种设计模式

    创建型 抽象工厂模式工厂方法建造者模式原型模式单态模式 结构型 适配器模式桥接模式组合模式外观模式装饰者模式享元模...

  • 结构型模式:09-组合模式

    透明组合模式的完整结构 安全组合模式的完整结构

  • 组合模式

    设计模式之组合模式 什么是组合模式? 组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以...

  • 组合模式

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

  • JavaScript设计模式 | 14-组合模式

    1、模式定义 组合模式,又称“部分-整体”模式,把对象组合成树形结构,以表示出“部分-整体”的层次结构。组合模式,...

  • 2022-03-16

    组合模式 应用场景 整体与部分的结构特征相似,数据以树型的层次结构表达。例如文件系统、树等 透明式的组合模式安全式...

网友评论

      本文标题:结构型模式-组合模式

      本文链接:https://www.haomeiwen.com/subject/hvqilctx.html