再谈组合模式

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

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

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

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

还是用书上的例子说明:


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

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

目录
相关文章
|
1月前
|
设计模式 安全 网络协议
11.组合模式设计思想
本文详细介绍了组合模式的设计思想和实现方法,涵盖组合模式的基础概念、实现步骤、实例演示、实现方式、优缺点分析等内容。通过具体的代码案例,展示了如何使用组合模式来处理具有层次结构的对象,如文件系统和购物清单,使客户端可以一致地处理单个对象和组合对象。文章还探讨了透明式和安全式组合模式的区别,并提供了设计建议和适用场景。适合初学者和有一定经验的开发者阅读。
44 3
|
1月前
|
设计模式 网络协议 Java
08.装饰者模式设计思想
装饰者模式是一种设计模式,用于在不修改原始类的情况下动态地给对象添加新功能。本文档详细介绍了装饰者模式的基础概念、实现方法、应用场景及优缺点。通过具体的咖啡示例和Java I/O流中的应用,展示了装饰者模式的灵活性和实用性。此外,还探讨了半透明装饰者模式的概念及其在实际开发中的应用。适合初学者和有一定经验的开发者学习。
23 2
|
7月前
|
设计模式 Java Go
【设计模式】适配器模式怎么理解?
【设计模式】适配器模式怎么理解?
56 1
|
7月前
|
设计模式 Java
小谈设计模式(20)—组合模式
小谈设计模式(20)—组合模式
|
设计模式 C++
【大话设计模式】设计模式的六种关系
【大话设计模式】设计模式的六种关系
|
设计模式 消息中间件 Java
【Java设计模式 面向对象设计思想】三 再谈抽象类和接口
【Java设计模式 面向对象设计思想】三 再谈抽象类和接口
168 0
|
设计模式 存储 安全
【Java设计模式 面向对象设计思想】一 再谈面向对象和封装、抽象、继承、多态四大特性
【Java设计模式 面向对象设计思想】一 再谈面向对象和封装、抽象、继承、多态四大特性
90 0
|
设计模式 前端开发 安全
【Java设计模式 面向对象设计思想】二 再谈面向对象和面向过程
【Java设计模式 面向对象设计思想】二 再谈面向对象和面向过程
100 0
|
设计模式 算法 安全
设计模式中的原型模式怎么理解
设计模式中的原型模式怎么理解
50 0
|
设计模式
23种设计模式-结构模式-组合模式(十一)
23种设计模式-结构模式-组合模式(十一)
23种设计模式-结构模式-组合模式(十一)