Composite模式属于对象的结构模式,有时候又叫部分-整体模式,它将对象组织到树结构中,把部分与整体的关系用树结构表示出来,例如一个文件系统就是个很典型的Composite模式系统。
Composite模式的三个角色:
1 Component(根节点) 为组合中的对象声明接口,在适当情况下,实现所有类共有接口的缺省行为,声明一个接口用于访问和管理Component的子组件
2 Leaf(树叶),在组合中表示叶节点对象,叶节点没有子节点,也就是说该对象是不存在子对象的
3 Composite(树枝),定义子部件的某些部件的行为,存储子部件,即该对象存在下级子对象的对象,实现component给出的所有管理子对象的方法
Composite模式的实现可以不提供对象的管理方法,但是Composite模式必须在合适的地方提供子对象的管理方法,在什么地方声明子对象的管理方法,如:add() remove()等等,这是值得思考的,所以Composite模式可以分成两种形式:透明式和安全式。如图:
安全式代码实现:
package composite;
public interface Component {
Composite getComposite();
void sampleOperation();
}
package composite;
public class Leaf implements Component {
@Override
public Composite getComposite() {
// TODO Auto-generated method stub
return null;
}
@Override
public void sampleOperation() {
// TODO Auto-generated method stub
}
}
package composite;
import java.util.Enumeration;
import java.util.Vector;
public class Composite implements Component {
private Vector componentVector = new Vector();
@Override
public Composite getComposite() {
return this;
}
@Override
public void sampleOperation() {
Enumeration e = getComponents();
while(e.hasMoreElements())
{
((Component) e.nextElement()).sampleOperation();
}
}
public void addComponent(Component c)
{
componentVector.add(c);
}
public void delComponent(Component c)
{
componentVector.remove(c);
}
public Enumeration getComponents()
{
return componentVector.elements();
}
}
透明式代码实现:
package composite;
import java.util.Enumeration;
public interface Component2 {
Composite2 getComposite();
void sampleOperation();
void addComponent(Component2 c);
void delComponent(Component2 c);
Enumeration getComponents();
}
package composite;
import java.util.Enumeration;
import java.util.Vector;
public class Composite2 implements Component2 {
private Vector componentVector = new Vector();
@Override
public void addComponent(Component2 c) {
// TODO Auto-generated method stub
componentVector.add(c);
}
@Override
public void delComponent(Component2 c) {
// TODO Auto-generated method stub
componentVector.remove(c);
}
@Override
public Enumeration getComponents() {
// TODO Auto-generated method stub
return componentVector.elements();
}
@Override
public Composite2 getComposite() {
// TODO Auto-generated method stub
return this;
}
@Override
public void sampleOperation() {
Enumeration e = getComponents();
while(e.hasMoreElements())
{
((Component) e.nextElement()).sampleOperation();
}
}
}
package composite;
import java.util.Enumeration;
public class Leaf2 implements Component2 {
@Override
public void addComponent(Component2 c) {
// TODO Auto-generated method stub
}
@Override
public void delComponent(Component2 c) {
// TODO Auto-generated method stub
}
@Override
public Enumeration getComponents() {
// TODO Auto-generated method stub
return null;
}
@Override
public Composite2 getComposite() {
// TODO Auto-generated method stub
return null;
}
@Override
public void sampleOperation() {
// TODO Auto-generated method stub
}
}
显然,透明式是不够安全的,因为树叶类对象和树枝(Composite)类对象是有实质的区别的;而安全式虽然够安全,但是却不够透明,因为树叶类和树枝类具有不同的接口,所以,在使用哪种Composite模式时,需要根据软件的具体情况对这两种形式做取舍。
- 大小: 78.7 KB
分享到:
相关推荐
将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。
C++设计模式课件20_Composite_组合模式.pdf
采用COMPOSITE设计模式表达复合变差函数的内存模型,为各种类型的变差函数模型实现了统一的访问接口,显著提高了核心代码的重用程度及系统的可维护性和扩展性。同时利用XML实现了变差函数模型的序列化和动态导人,...
设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of ...
C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式) 体验课程
设计模式体现的是一种思想,而思想则是指导行为的一切,理解和掌握了设计模式,并不是说记住了23种(或更多)设计场景和解决策略(实际上这也是很重要的一笔财富),实际接受的是一种思想的熏陶和洗礼,等这种思想...
C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式) (Level 300)
23种设计模式之八(结构型模式)Composite模式
设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of ...
设计模式C++学习之组合模式(Composite)
C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式) C#面向对象设计模式纵横谈(10):Decorator 装饰模式(结构型模式) C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式) C#面向对象设计...
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要资源分。敬请期待。 这是第9节:结构型...
《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...
设计模式精解-GoF 23 种设计模式解析附 C++实现源码 目 录 引 言 0.1 设计模式解析(总序) 0.2 设计模式解析后记 0.3 与作者联系 1 创建型模式 1.1 Factory模式 1.2 AbstactFactory模式 1.3 Singleton...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、AbstractFactory、FactoryMethod、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较特别...
C#设计模式(11)-Composite Pattern 88 一、 合成(Composite)模式 88 二、 合成模式概述 88 三、 安全式的合成模式的结构 90 四、 安全式的合成模式实现 91 五、 透明式的合成模式结构 93 六、 透明式的合成模式...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...