JAVA用组合方式实现汽车分类_设计模式之第22章-组合模式(Java实现)

设计模式之第22章-组合模式(Java实现)

“鱼哥,有没有什么模式是用来处理树形的“部分与整体”的层次结构的啊。”“当然”“没有?”“有啊。别急,一会人就到了。”

组合模式之自我介绍

“请问你是?怎么什么都不说就直接上来了。”“本式行不更名坐不改姓,就是组合模式来着,此次受作者之邀来讲讲我的前世今生来着。”“哦,你就是组合模式啊,久仰久仰。”“失敬失敬。”恩,首先我先说下定义:Compose objects into tree structure to represent part-whole hierarchies.Composite lets clients treat individual objects and compositions of objects uniformly.就是说将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合的使用具有一致性。我的通用类图如下所示:

07a8a9380e1cb63e56d6705477e2f645.png

用户使用Component类接口与组合结构中的对象进行交互。如果接收者是一个叶节点,则直接处理请求,如果接收者是Composite,它通常将请求发送给它的子部件,在转发请求之前与/或之后可能执行一些辅助操作。

组合模式之自我分析

优点:

定义了包含基本对象和组合对象的类的层次结构。基本对象可以被组合成更复杂的组合对象,这个组合又会被组合,不断递归下去。

简化客户代码。客户可以一致的使用组合结构和单个对象。

使得更容易增加新增类型的组件。

缺点:

很难限制组合中的组件。有时希望一个组合只能有某些特定组件。使用Composite时,不能依赖类型系统施加这些约束,而必须要在运行时刻进行检查。

组合模式之实现

实现这么简单的事还需要举栗子么?(PS:别废话,这个东西是赖不掉的,想当年工厂方法和抽象工厂夫妻俩就没赖掉。)那个好吧,我就举个栗子以便于理解:

首先是抽象的Component类:

1 public abstract classComponent{2 //部分与整体共享的方法

3 public voiddoSth(){4

5 }6 }

接下来是继承自树枝的类的实现,里面包含增加、删除以及获得分支下所有的叶子或分支组件的方法,代码如下:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 public class Composite extendsComponent{2 //Component容器

3 private ArrayList compList = new ArrayList<>();4 //增加叶子/树枝节点

5 public voidadd (Component component){6 this.compList.add(component);7 }8

9 //删除叶子/树枝节点

10 public voidremove(Component component){11 this.compList.remove(component);12 }13

14 //获得分支下所有的叶子/分支Component

15 public ArrayListgetChildren(){16 return this.compList;17 }18 }

View Code

叶子节点的实现方法:

1 public class Leaf extendsComponent{2

3 }

组合模式就这么简单的实现了。为表诚意,我再实现个场景类来说明如何调用这些个方法:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 public classClient{2 public static voidmain(String[] args) {3 //创建根节点

4 Composite root = newComposite();5 root.doSth();6 //创建一个树枝

7 Composite branch = newComposite();8 //创造叶子

9 Leaf leaf = newLeaf();10 //组合

11 root.add(branch);12 branch.add(leaf);13 }14 }

View Code

此类中,显示创建根节点,然后是树枝,最后是叶子,然后这些被组合成树。就此结束。

组合模式之应用场景

表示整体-部分的层次结构。

希望用户忽略组合对象与单个对象的不同,用户将统一的使用组合结构中的所有对象。

好了,设计模式之23式至此完结。撒花,撤走~撒有那拉,米娜。

PS:本博客欢迎转发,但请注明博客地址及作者~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值