Java必学的23种设计模式(详细)(5)
Java设计模式(疯狂Java联盟版)
将对象组合成树形结构以表示\部分-整体\的层次结构。\使得用户对单个对象和组合对*的使用具有一致性。\
适用性
1.你想表示对象的部分-整*层次结构。
2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
参与者
1.Component
为组合中的对象声明接口。
在适当的情况下,实现所有类共有接口的缺省行为。 声明一个接口用于访问和管理Component的子组件。
(可选)在递归结构中定义一个接口,用于访问一个父部件,并在合*的情况下实现它。
2.Leaf
在组合中表示叶节点对象,叶节点没有子节点。 在组合中定义节点对象的行为。
3.Compos*te
定义有子部件的*些部件的行为。 存储子部件。
在Component接口中实现与子部件有*的操作。
4.Client
通过Component接*操纵组合部件的对象。
类图
例子 Component
21
Java设计模式(疯狂Java联盟版)
p*blic abstract class Employer {
private String name;
public void setName(String name) { this.name = *ame; }
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); }
*ublic List getE*ployers() { return this.employers; } }
Leaf
public class Programmer extends Employer {
public Programmer(String name) { setNam*(name);
employers = null;//程序员, 表示没有下属了 }
public v*id add(Employer employer) { }
public void delete(Employer employer) { } }
22
Java设计模式(疯狂Java联盟版)
public class Pro*ectAssistant extends Employer {
public ProjectAss*stant(String name) { setName(name);
employers = *ull;//项目助理, 表示没有下属了 }
public void add(Employer employer) { }
public void delet*(Employer employer) { } }
Composite
public class Project*anager extends E*ployer {
public ProjectManager(String name) { setName(name);
employers = new A*rayList(); }
public void add(Employer employer) { employers.add(employer); }
public void delete(Emplo*er employer) { employers.remove(employer); } }
Clie*t
publ*c class Test {
public st*tic void main(String[] args) {
Employer pm = new ProjectManager(\项目经理\ Emplo*er pa = new ProjectAssistant(\项目助理\ Employer progra*mer1 = new Programmer(\程序员一\ Employer programmer2 = new Programmer(\程序员二\
pm.add(pa);//为项目经理添加项目助理
pm.add(programmer2);//*项目经理*加程序员
23
Java设计模式(疯狂Java联盟版)
List ems = pm.getEm*loyers(); for (Employer em : ems) {
System.out.println(em.getNam*()); } * }
result
项目助理 程序员二
1.2.4 装饰模式
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模*相比生成子类更为*活。
适用性
1.在不影响其他*象的情况下,以动态、透明的方式给单个对象添加职责。
2.处理那些可以撤消的职责。
3.当不能采用生成子类的方法进行扩充时。
参与者
1.Component
定义一个对象接口,可以给这些对象动态地添加职责。
2.ConcreteComponent
定义一个对象,可以给这个对象添加一些职责。
3.Decorator
维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。
4.ConcreteDecorator 向组件添加职责。
类图
24
Java设计模式(疯狂Java联盟版)
例子 Component
public interface Person {
void eat(); }
ConcreteComponent
*ublic class M*n implements Person { public void eat() { System.out.println(\男人在吃\ * }
Decorator
public abstrac* class Decorator implements Perso* {
protected Person person*
public void setPerson(Person person) { this.person = person; }
public void eat() { person.eat(); } }
ConcreteDec*rator
publi* class ManDecoratorA extends Decorator {
25
…… 此处隐藏:880字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [实用模板]第八章:法国“新浪潮”与“左岸派”
- [实用模板]2021年北京上半年临床医学检验技师生物
- [实用模板]SAP GUI 7.10客户端安装配置文档
- [实用模板]2001年临床执业医师资格考试综合笔试试
- [实用模板]36机场工作实用英语词汇总结
- [实用模板](一)社会保险稽核通知书
- [实用模板]安全教育主题班会材料
- [实用模板]濉溪县春季呼吸道传染病防控应急演练方
- [实用模板]长沙房地产市场周报(1.30-2.3)
- [实用模板]六年级数学上册典中点 - 图文
- [实用模板]C程序设计(红皮书)习题官方参考答案
- [实用模板]中国证监会第一届创业板发行审核委员会
- [实用模板]桥梁工程复习题
- [实用模板]2011学而思数学及答案
- [实用模板]初中病句修改专项练习
- [实用模板]监理学习知识1 - 图文
- [实用模板]小机灵杯四年级试题
- [实用模板]国贸专业毕业论文模板
- [实用模板]教育学概论考试练习题-判断题4
- [实用模板]2015届高考英语一轮复习精品资料(译林
- 00Nkmhe_市场营销学工商管理_电子商务_
- 事业单位考试法律常识
- 诚信教育实施方案
- 吉大小天鹅食品安全检测箱方案(高中低
- 房地产销售培训资料
- 高一地理必修1复习提纲
- 新概念英语第二册lesson_1_练习题
- 证券公司内部培训资料
- 小学英语时间介词专项练习
- 新世纪英语专业综合教程(第二版)第1册U
- 【新课标】浙教版最新2018年八年级数学
- 工程建设管理纲要
- 外研版 必修一Module 4 A Social Surve
- Adobe认证考试 AE复习资料
- 基于H.264AVC与AVS标准的帧内预测技术
- 《食品检验机构资质认定管理办法》(质
- ABB变频器培训课件
- (完整版)小学说明文阅读练习题及答案
- 深思洛克(SenseLock) 深思IV,深思4,深
- 弟子规全文带拼音




