博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(设计模式)组合模式
阅读量:5355 次
发布时间:2019-06-15

本文共 1857 字,大约阅读时间需要 6 分钟。

将对象组合成树形结构用以表示“部分-整体”的层次结构。“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
ems = pm.getEmployers(); for(Employer em : ems) { System.out.println(em.getName()); } }

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

 

转载于:https://www.cnblogs.com/xiaohuihui96/p/7145823.html

你可能感兴趣的文章
上海淮海中路上苹果旗舰店门口欲砸一台IMAC电脑维权
查看>>
Google透露Android Market恶意程序扫描服务
查看>>
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
对闭包的理解
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
Code Snippet
查看>>
zoj 1232 Adventure of Super Mario
查看>>
组合数学 UVa 11538 Chess Queen
查看>>
oracle job
查看>>
Redis常用命令
查看>>
[转载]电脑小绝技
查看>>
windos系统定时执行批处理文件(bat文件)
查看>>
thinkphp如何实现伪静态
查看>>
BZOJ 2243: [SDOI2011]染色( 树链剖分 )
查看>>
BZOJ 1925: [Sdoi2010]地精部落( dp )
查看>>
c++中的string常用函数用法总结!
查看>>