组合模式
来源:互联网 发布:淘宝广告直通车 编辑:程序博客网 时间:2024/05/16 17:58
- 组合模式Composite Pattern
- 定义
- 意义
- 类图
- 例子
组合模式(Composite Pattern)
定义
允许将对象组合成树形结构来表现“整体-部分”层次结构。组合让客户以一致的方式处理个别对象和对象组合。
意义
- 组合模式能让我们用树形方式创建对象的结构,树里面包含组合以及个别对象
- 使用组合结构我们能把相同的操作应用在组合和个别对象上,即在大多数情况下,我们可以忽略组合和个别对象之间的差别
类图
所有的组件都必须实现Component接口,然而,叶节点和组合结点的角色不同,所以有些方法对于叶节点来说可能并没有意义,我们可以抛出运行时异常(UnsupportedOperationException)
例子
- 结构图
- 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; }}
- 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) { }}
- 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); }}
- 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()); } }}
- result
项目助理
程序员二
例子参考http://www.crazyit.org
阅读全文
0 0
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- android studio compile 使用+ 的一些警告
- 利用jTessBoxEditor工具进行Tesseract3.02样本训练,提高识别率
- 如何解决:INSTALL_PARSE_FAILED_NO_CERTIFICATES 问题
- Sublime Text3: 让JSX支持Emmet调用代码补全和缩写(tab)
- AlertDialog,ProgressBar,SeekBar了解
- 组合模式
- 安卓日夜模式的切换
- java事件监听机制及应用
- Eclipse中maven项目没法自动编译、编译失败、WEB-INF/classes目录中没有Class文件
- Spring在代码中获取bean的几种方式
- static在c++中
- UVa10048: Audiophbia 题解
- 互联网威胁:“超连接”时代的4大安全漏洞
- 局域网内配置Outlook 2007支持收发Domino 8.5邮箱