八. 合成模式(整体-部分模式)
整理自 《java与模式》阎宏编著
1.意图:
合成模式将“部分”与”整体”的关系用树结构表示出来。合成模允许客户端把一个个单独的成份对象和由它们复合而成的合成对象同等看待。
2.类图:
3.原理:
合成模式用来设计一个公共的接口,即可以提供给单独的成份对象使用,也可以提供给合成的对象使用,这样客户端就可以以一种统一的接口来使用单独的成份对象和合成对象。
4.特征:
抽象构件(Component):抽象角色,给出共有的接口和默认的行为。
树叶构件(Leaf):没有子对象,定义出参加组合的原始对象的行为。
树枝构件(Composite):有子对象,给出树枝构件对象的行为。
5.说明:
合成模式必须提供管理子对象的行为,如:addChild(),
removeChild(),getChildren()等。
6.使用案例:
文件系统(文件夹为合成对象,文件为成份对象)
7.代码:
//Composite.java
public abstract class Component
{
/**
* Add child to Composite
*/
public void addChild(Component child)
{
// default implementation - throw error
throw new RuntimeException("addChild(): Not intended to be called");
}
/**
* Remove child from Composite
*/
public void removeChild(Component child)
{
// default implementation - throw error
throw new RuntimeException("remove(): Not intended to be called");
}
/**
* @return iterator over children of this component, or <code>null</code>
* if there are no children.
*/
public Iterator getChildren()
{
return null;
}
/**
* Sample method
*/
public abstract void sampleOperation();
}
// Composite.java
public class Composite extends Component
{
/**
* Stores components of this composite
*
*/
private ArrayList components;
public void addChild(Component child)
{
if (components == null)
{
components = new ArrayList();
}
components.add(child);
}
public void removeChild(Component child)
{
if (components != null)
{
components.remove(child);
}
}
public Iterator getChildren()
{
if (components == null)
{
return null;
}
return components.iterator();
}
public void sampleOperation()
{
if (components != null)
{
Iterator it = components.iterator();
while (it.hasNext())
{
((Component) it.next()).sampleOperation();
}
}
}
}
// Leaf.java
public class Leaf extends Component
{
public void sampleOperation()
{
// implement this operation
}
}
分享到:
相关推荐
结构型模式处理对象和对象之间的关系,这些关系通过继承或者组合来实现,并且可以合成更复杂的结构。 1. **Bridge模式** - **定义**:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 - **应用场景**:...
8. **合成模式**:合成模式是一种结构型模式,它将对象组合成树形结构,以表示“整体-部分”关系。客户端可以一致地处理单个对象和组合对象。 9. **装饰模式**:装饰模式在运行时动态地给对象添加新的行为或职责,...
4. **客户端(Client)**:客户端代码对组合对象和叶子对象进行相同的操作,无需关心它们的具体类型,这是合成模式的核心优势,即"部分-整体"的透明性。 在描述中提到的两种实现方式——安全式(Safe)和透明式...
合成模式允许你构建树形结构来表示部分与整体的关系,使得客户端可以统一地处理单个组件和组合组件。 9. **装饰器模式**:为了给Sarly庆祝生日,你需要在不改变礼物本质的情况下添加额外的元素。装饰器模式可以在...
组合模式允许用户将对象组织成树形结构以表示部分-整体层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 #### 3.4 装饰模式 装饰模式动态地给一个对象添加一些额外的职责。就增加功能而言,装饰...
这是一套专为已有一定Photoshop基础的学习者设计的教程,旨在帮助他们深入掌握图像合成、修图、抠图以及整体调整等高级技巧,从而成为真正的“PS武林高手”。 首先,我们来谈谈图像合成。图像合成是Photoshop的核心...
- **从招式与内功谈起**:这部分内容将帮助读者理解设计模式的本质,即它们不仅仅是编程技巧的集合,更是解决问题的思维模式。 - **招式**:指的是具体的编程实践,如类的设计、方法的实现等。 - **内功**:则更...
组合模式允许将对象组合成树形结构以表示部分-整体的层次结构。装饰模式用于动态地给一个对象添加一些额外的职责。外观模式定义了一个高层接口,让子系统更容易使用。享元模式是通过共享来支持大量细粒度对象的复用...
合成模式 (Composite) - **定义**:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 - **应用场景**:处理层次结构中的对象,如文件系统、UI控件等。 - **...
- **定义**:将对象组合成树形结构以表示“部分-整体”的层次结构。 - **结构**:包含抽象组件、叶子组件和复合组件。 - **优点**:简化了客户端代码,使客户端可以一致地处理个体对象和组合对象。 - **缺点**:设计...
- **合成模式**:合成模式用于表示部分-整体的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 - **装饰模式**:装饰模式动态地给对象添加新的行为或职责,提供了比继承更灵活的扩展机制。 - **门面...
合成模式用于描述部分与整体之间的关系,允许你将对象组织成树形结构,表示“整体-部分”关系。客户端可以统一处理单个对象和由多个对象组成的组合对象,简化了操作。 9. 装饰模式(Decorator): 装饰模式允许...
- **合成关系**:例如`Bird`类与`Wing`类之间的关系,表示整体控制部分的生命周期,部分不能脱离整体独立存在。 - **依赖关系**:例如`Animal`类中的`Metabolism`方法依赖于`Oxygen`和`Water`对象,表示短暂的依赖...
- 组合模式:允许你将对象组合成树形结构,以表示“整体-部分”关系。 - 享元模式:在不牺牲可区分性的前提下,有效地支持大量细粒度对象的复用。 3. 行为型模式(描述对象间的交互和职责分配) - 策略模式:...
- 组合模式:允许将对象组合成树形结构,以表示“部分-整体”的层次结构,用户可以对单个对象和组合对象进行一致的操作。 - 享元模式:通过共享技术有效支持大量细粒度对象,减少内存消耗。 3. 行为型模式: - ...
在阎宏博士的经典著作《JAVA与模式》中,合成模式被详细介绍并解释为一种重要的设计模式,它属于对象的结构模式之一,常被称为“部分—整体”模式。合成模式通过树形结构组织对象,使用户能够将单个元素与复合元素...
合成模式允许你将对象组合成树形结构以表示“部分-整体”的层次结构。组合让客户可以统一处理个别对象以及组合对象。 十九、装饰模式 装饰模式动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成...
- **七大设计原则**:单一职责原则、接口隔离原则、依赖倒置原则、里氏替换原则、开闭原则、迪米特法则、合成复用原则。 - **类图说明**:每个原则都有其特定的类图来表示如何实现这些原则。 - **应用示例**:...
- **合成模式**:合成模式将对象组合成树形结构,以表现“整体-部分”关系。MM选择的T恤、裙子和包包构成了一套礼物,这就是合成模式的应用。 - **装饰器模式**:装饰器模式可以在不改变对象原有功能的基础上,...