java设计模式混合使用实例,多种设计模式结合Java

  java设计模式混合使用实例,多种设计模式结合Java

  

目录

定义原理类图案例需求方案分析总结

 

  

定义

组合模式,又叫部分整体模式,它创建了对象组的数据结构(将对象组合成树状结构,用来表示部分整体的层级关系)组合模式使得用户对单个对象和组合对象的访问具有一致性

 

  

原理类图

 

  组件:这是组合模式中的抽象构件,他里面定义了所有类共有的默认行为,用来访问和管理成分的子部件,组件可以是抽象类,也可以是接口

  叶子:在组合模式中表示叶子节点,叶子节点没有子节点了,他是最末端存放数据的结构

  复合材料:非叶子节点,下面仍然有分支,用来存储分支,实现了成分定义的默认行为

  

案例

 

  

需求

商场的服装店,专卖店,衣服,裤子的关系

 

  

方案

定义组合模式的抽象构件

 

  公共抽象类组件{私有字符串名称;私弦desc;公共字符串getName(){ return name;} public void set name(String name){ this。name=名称;}公共字符串getDesc() {返回desc;} public void setDesc(字符串desc){这个。desc=desc;}公共组件(字符串名称,字符串desc){这个。name=名称;这个。desc=desc;} public void add(Component Component){ throw new UnsupportedOperationException();} public void remove(Component Component){ throw new UnsupportedOperationException();}公共抽象void show();}定义服装商铺类

  公共类存储扩展组件{ list Component Component list=new ArrayList Component();公共存储(串名,串desc){超级(名,desc);} @覆盖公共字符串getName(){ return super。getName();} @覆盖公共字符串get desc(){ return super。获取desc();} @覆盖public void add(Component Component){ system。出去。println(添加: getName());componentList.add(组件);} @ Override public void remove(Component组件){ system。出去。println(移除: getName());组件列表。移除(组件);} @覆盖public void show(){ for(Component组件:组件列表){系统。出去。println(组件。getname());组件。show();} }}定义服装专卖店商铺

  公共类品牌商店扩展组件{列出组件组件列表=新Ar

  rayList<Component>(); public BrandStore(String name, String desc) { super(name, desc); } @Override public String getName() { return super.getName(); } @Override public String getDesc() { return super.getDesc(); } @Override public void add(Component component) { componentList.add(component); } @Override public void remove(Component component) { componentList.remove(component); } @Override public void show() { for (Component component : componentList) { System.out.println(component.getName()); component.show(); } }}定义运动装

  

public class Sportswear extends Component{ List<Component> componentList = new ArrayList<Component>(); @Override public String getName() { return super.getName(); } @Override public String getDesc() { return super.getDesc(); } public Sportswear(String name, String desc) { super(name, desc); } @Override public void add(Component component) { componentList.add(component); } @Override public void remove(Component component) { componentList.remove(component); } @Override public void show() { for (Component component: componentList) { System.out.println(component.getName()); } }}

定义测试类

 

  

public class Test { public static void main(String[] args) { // 服装店 Component store = new Store("服装店","服装店"); // 专卖店 Component brandStore1 = new BrandStore("李宁服装专卖店","李宁服装专卖店"); Component brandStore2 = new BrandStore("361服装专卖店","361服装专卖店"); // 运动装 Component sportswear1 = new Sportswear("运动装","运动装"); Component sportswear2 = new Sportswear("休闲装","休闲装"); brandStore1.add(sportswear1); brandStore2.add(sportswear2); store.add(brandStore1); store.add(brandStore2); store.show(); }}

查看测试结果

 

  

 

  

 

  

分析

该案例中,服装店(Store),专卖店(BrandStore),运动装(Sportswear)都继承了抽象构件(Component),通过持有一个list来管理自身持有的对象,这样客户端就可以一致处理单个对象和组合对象,屏蔽了对象层次的差异性,这样的话,一致的行为就可以控制不同的层次了。

 

  

 

  

总结

优势

 

  组合模式可以使得客户端代码可以一致的处理单个对象和组合对象,无须关心自己处理的是单个还是组合,屏蔽了对象系统的层次差异性,这样的话一致的行为就可以控制不同层次了

  扩展性非常高,可以很方便的增加叶子节点和非叶子节点,并且对于现有的类库无侵入,满足开闭原则

  劣势

  如果说各个节点有很大差异的话,不适合使用组合模式

  使用场景

  处理树形结构,具备统一行为,建议大家使用组合模式

  想体现对象的部分,整体结构的时候,可以使用组合模式,典型一点例如文件和文件夹

  到此这篇关于Java设计模式之组合模式的示例详解的文章就介绍到这了,更多相关Java组合模式内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: