再谈组合模式

简介: 组合模式前面虽然已经学过了,可是那天给米老师讲这个模式发现自己理解的还是不够透彻,所以今天就再分析分析这个模式。组合模式是通过把对象组合成树形结构来表示“部分与整体”的层次结构,它使得用户对单个对象和组合对象的使用具有一致性。

组合模式前面虽然已经学过了,可是那天给米老师讲这个模式发现自己理解的还是不够透彻,所以今天就再分析分析这个模式。

组合模式是通过把对象组合成树形结构来表示“部分与整体”的层次结构,它使得用户对单个对象和组合对象的使用具有一致性。从这句话上来看,组合模式应该是事先把对象组合成树形结构,包括树枝节点和树叶节点。然后在对树枝节点和树叶节点进行统一的处理,使得用户对树枝节点和树叶节点的使用具有一致性。

在什么时候可以使用组合模式呢?当需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,就可以使用组合模式了。也就是说首先对象的结构模式应该是树形结构,具有明确的树枝和树叶节点,而且从主观上可以忽略树枝和树叶的不同,可以统一的使用树枝和树叶,这个时候就应该使用组合模式。

还是用书上的例子说明:


实例中北京总公司、上海华东分公司、南京办事处、杭州办事处都是树枝节点;总公司人力资源部、总公司财务部、华东分公司人力资源部、华东分公司财务部、南京办事处人力资源部、南京办事处财务部、杭州办事处人力资源部、杭州办事处财务部都是树叶节点。其中总公司人力资源部与杭州办事处人力资源部都属于树叶节点,不同的是他们属于不同的树枝。总公司人力资源部属于总公司枝干,杭州办事处人力资源部属于杭州办事处枝干。但是它们都可以履行员工招聘培训管理的职责,这就是统一的使用组合结构中的所有对象。

但是我们假设没有各个树枝节点下没有人力部和财务部,那么杭州办事处和南京办事处就成为树叶节点。现在我们想要通过组合模式统一的为各个节点添加人力部和财务部是够可行?从理论上是不可行的,在叶节点中虽然也有Add和Remove,但是这只是为了达到叶节点和枝节点的一致性,叶节点本身不具备Add()、Remove方法。所以杭州办事处和南京办事处下面是不能在添加节点的,但是实际中有没有办法让各个公司和办事处一致的添加人力部和财务部呢?答案是肯定可以!但可能不是使用组合模式,人外有人天外有天,办法总是有的,只是自己现有水平可能还没办法解决,希望高手们指点!感谢!

目录
相关文章
|
12天前
|
设计模式 Java
小谈设计模式(20)—组合模式
小谈设计模式(20)—组合模式
|
2月前
|
设计模式 Java
浅谈设计模式 - 组合模式(十二)
浅谈设计模式 - 组合模式(十二)
51 0
|
10月前
|
设计模式 消息中间件 Java
【Java设计模式 面向对象设计思想】三 再谈抽象类和接口
【Java设计模式 面向对象设计思想】三 再谈抽象类和接口
117 0
|
11月前
|
设计模式
【设计模式】【第八章】【商品多级分类目录场景】【组合模式+访问者模式】
创建design-demo项目 创建ItemController 创建ItemService 创建ItemServiceimpl 创建ItemVisitor 创建DelItemVisitor 创建AddItemVisitor 创建ProductItem 创建AbstractProductItem 创建MockDb
|
设计模式 Java
【设计模式】我终于读懂了组合模式。。。(下)
【设计模式】我终于读懂了组合模式。。。(下)
【设计模式】我终于读懂了组合模式。。。(下)
|
设计模式 存储
【设计模式】我终于读懂了组合模式。。。(上)
【设计模式】我终于读懂了组合模式。。。
【设计模式】我终于读懂了组合模式。。。(上)
|
设计模式
23种设计模式-结构模式-组合模式(十一)
23种设计模式-结构模式-组合模式(十一)
23种设计模式-结构模式-组合模式(十一)
|
设计模式 Java 数据库连接
23种设计模式-结构模式-享元模式(十二)
23种设计模式-结构模式-享元模式(十二)
23种设计模式-结构模式-享元模式(十二)
|
设计模式 存储 安全
GOF设计模式之组合设计模式(结构型模式) ✨ 每日积累
GOF设计模式之组合设计模式(结构型模式) ✨ 每日积累
GOF设计模式之组合设计模式(结构型模式) ✨ 每日积累
GOF之装饰器模式(结构型模式) ✨ 每日积累
GOF之装饰器模式(结构型模式) ✨ 每日积累
GOF之装饰器模式(结构型模式) ✨ 每日积累

热门文章

最新文章