7组合模式PPT课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

-
5
组合模式的UML类图
-
6
安全方式
-
7
透明方式
-
8
两种方式的比较
对于合成模式而言,在安全性和透明性上,会 更看重透明性,毕竟合成模式的目的是:让客 户端不再区分操作的是树枝对象还是树叶对象, 而是以一个统一的方式来操作。
而且对于安全性的实现,需要区分是树枝对象 还是树叶对象。有时候,需要将对象进行类型 转换,却发现类型信息丢失了,只好强行转换, 这种类型转换必然是不够安全的。
-
12
}
组合模式示例
3.Leaf节点(Leaf Node):MilitarySoldier.java
import java.util.*;
public class MilitarySoldier implements MilitaryPerson{
double salary;
String name;
MilitarySoldier(String name,double salary){
this.name=name;
this.salary=salary;
}
public void add(MilitaryPerson person) {}
public void remove (MilitaryPerson person){}
-
11
组合模式示例
2. Composite节点(Composite Node): MilitaryOfficer.java
import java.util.*;
public class MilitaryOfficer implements MilitaryPerson{
LinkedList<MilitaryPerson> list;
list.add(person);
}
public void remove(MilitaryPerson person){
list.remove(person);
}
public MilitaryPerson getChild(int index) {
return list.get(index);
}
public Iterator<MilitaryPerson> getAllChildren() {
建议多采用透明性的实现方式。
-
9
组合模式的优点
组合模式中包含有个体对象和组合对象, 并形成树形结构,使用户可Hale Waihona Puke Baidu方便地处 理个体对象和组合对象。
组合对象和个体对象实现了相同的接口, 用户一般不需区分个体对象和组合对象。
当增加新的Composite节点和Leaf节点 时,用户的重要代码不需要作出修改。
String name;
double salary;
MilitaryOfficer(String name,double salary){
this.name=name;
this.salary=salary;
list=new LinkedList<MilitaryPerson>();
}
public void add(MilitaryPerson person) {
-
10
组合模式示例
1.抽象组件(Component) : MilitaryPerson.java import java.util.*; public interface MilitaryPerson{
public void add(MilitaryPerson person) ; public void remove(MilitaryPerson person) ; public MilitaryPerson getChild(int index); public Iterator<MilitaryPerson> getAllChildren() ; public boolean isLeaf(); public double getSalary(); public void setSalary(double salary); }
return list.iterator();
}
public boolean isLeaf(){
return false;
}
public double getSalary(){
return salary;
}
public void setSalary(double salary){
this.salary=salary; }
public MilitaryPerson getChild(int index) {
return null;
}
public Iterator<MilitaryPerson> getAllChildren() {
return null;
}
public boolean isLeaf(){
return true;
使用组合模式,可以让用户以一致的方 式处理个体对象和组合对象,组合模式 的关键在于无论是个体对象还是组合对 象都实现了相同的接口或都是同一个抽 象类的子类。
-
4
组合模式的角色
抽象组件(Component) Composite节点(Composite Node) Leaf节点(Leaf Node)
起来。""......",MM都会用Composite模 式了,你会了没有?
-
2
组合模式概述
合成模式将对象组织到树结构中,可以 用来描述整体-部分的关系。
合成模式就是一个处理对象的树结构的 模式。
合成模式使得客户端把一个个单独的成 分对象和由他们复合而成的合成对象同 等看待。
-
3
组合模式概述
第七讲
组合(composite)模式
-
1
场景
COMPOSITE—Mary今天过生日。"我过 生日,你要送我一件礼物。""嗯,好吧, 去商店,你自己挑。""这件T恤挺漂亮, 买,这条裙子好看,买,这个包也不错,
买。""喂,买了三件了呀,我只答应送一 件礼物的哦。""什么呀,T恤加裙子加包 包,正好配成一套呀,小姐,麻烦你包
}
public double getSalary(){
return salary;
}
public void setSalary(double salary){
this.salary=salary;
}
-
13
}
组合模式示例
4.应用_1:ComputerSalary.java import java.util.*; public class ComputerSalary{
相关文档
最新文档