1 / 35
文档名称:

设计模式教学课件13(与“对象”有关文档共35张).pptx

格式:pptx   大小:344KB   页数:35页
下载后只包含 1 个 PPTX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

设计模式教学课件13(与“对象”有关文档共35张).pptx

上传人:胜利的喜悦 2022/11/22 文件大小:344 KB

下载得到文件列表

设计模式教学课件13(与“对象”有关文档共35张).pptx

文档介绍

文档介绍:该【设计模式教学课件13(与“对象”有关文档共35张) 】是由【胜利的喜悦】上传分享,文档一共【35】页,该文档可以免费在线阅读,需要了解更多关于【设计模式教学课件13(与“对象”有关文档共35张) 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。场景问题
商品类别树
+服装
+男装
-衬衣
-夹克
+女装
-裙子
-套装
特点
有一个根节点
树枝节点
叶子节点
现在需要管理商品类别树,假设要求能实现输出如上商品类别树的结构功能,应该如何实现?
第1页,共35页。
分析
商品类别树的节点被分成两种,一种是容器节点,另一种是叶子节点。
容器节点可以包含其他容器节点或者叶子节点
第2页,共35页。
WriteLine(newString('-',depth)+name);
addLeaf(leaf3);
缺点:不够安全,因为树叶类对象和合成类对象在本质上是有区别的。
publicComposite(stringname)
Leafleaf2=newLeaf("夹克");
很难限制组合中的组件类型
publicabstractvoidDisplay(intdepth);
树叶构件(Leaf)角色:代表参加组合的树叶对象。
比如读取XML文件,或是对语句进行语法分析等
publicabstractvoidAdd(Componentc);
addComposite(c1);
然而这种方法存在一个问题:使用这些类的代码必须区别对待图元对象与容器对象,而实际上大多数情况下用户认为它们是一样的。
不带模式的解决方案
叶子对象:
publicclassLeaf{
privateStringname="";
publicLeaf(Stringname){
=name;
}
publicvoidprintStruct(StringpreStr){
(preStr+"-"+name);
}
}
第3页,共35页。
组合对象的代码实现
组合对象里可以包含其他组合对象或者是叶子对象,由于类型不同,需要分开记录
第4页,共35页。
publicclassComposite{
privateCollection<Composite>childComposite=
newArrayList<Composite>();
privateCollection<Leaf>childLeaf=
newArrayList<Leaf>();
privateStringname="";
publicComposite(Stringname){
=name;
}
publicvoidaddComposite(Compositec){
(c);
}
publicvoidaddLeaf(Leafleaf){
(leaf);
}
第5页,共35页。
publicvoidprintStruct(StringpreStr){
(preStr+"+"+);
preStr+="";
for(Leafleaf:childLeaf){
(preStr);
}
for(Compositec:childComposite){
(preStr);
}
}
}
第6页,共35页。
客户端
publicclassClient{
publicstaticvoidmain(String[]args){
\\定义所有的组合对象
Compositeroot=newComposite("服装");
Compositec1=newComposite("男装");
Compositec2=newComposite("女装");
\\定义所有的叶子节点
Leafleaf1=newLeaf("衬衣");
Leafleaf2=newLeaf("夹克");
Leafleaf3=newLeaf("裙子");
Leafleaf4=newLeaf("套装");
\\按照树的结构来组合组合对象和叶子对象
(c1);
(c2);
(leaf1);
(leaf2);
(leaf3);
(leaf4);
("");
}
}
第7页,共35页。
有何问题
必须区分组合对象和叶子对象,并进行区别的对待
区别对待组合对象和叶子对象,不仅让程序变得复杂,还对功能的扩展也带来不便。
第8页,共35页。
第9页,共35页。
组合模式有时又叫做部分-整体模式(Part-Whole)。组合模式将对象组织到树结构中,可以用来描述整体与部分的关系。组合模式可以使客户端将单纯元素与复合元素同等看待。
第10页,共35页。