合成模型模式
2006-11-16 11:59
225 查看
合成模型模式属于对象的结构模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系,合成模式可以使客户端将单纯元素与复合元素同等看待。
在合成模式的树结构中,有两种节点,一种是无子节点的树叶节点,一种是有子节点的树枝节点。树枝节点是本模式的核心,可称为合成类。在整个合成模式的类结构中,除了两种节点外,还有它们的公共抽象接口。
合成模式所涉及到的主要内容就是把不同的元件纳入到树中来,并分为两种节点来管理。一个容易理解的例子就是文件系统:在文件系统中,目录可以看作是树枝节点,文件可以看成是树叶节点。
合成模式又可以分为两种:
一种是安全型:在接口中不定义合成类所具有的管理方法,比如add、remove等,这样,树叶节点就不用实现这些方法。这种类型的好处是方法严密,但接口不整齐;
另一种是透明型:在接口中定义合成类所具有的管理方法,这样,合成类和树叶类都要实现这些方法,树叶类所提供的方法当然是无意义的。这种类型的好处是接口整齐,但有些混乱。
以下是这两种类型合成模式的示例:
package composite.safe;
public interface Component ...{
public void function();
}
package composite.safe;
import java.util.*;
public class Composite implements Component ...{
private Vector vector = new Vector();
public void function() ...{
System.out.println(this + ".function()");
}
public void add(Component c) ...{
vector.add(c);
}
public void remove(Component c) ...{
vector.remove(c);
}
public Enumeration components() ...{
return vector.elements();
}
}
package composite.safe;
public class Leaf implements Component ...{
public void function() ...{
System.out.println(this + ".function()");
}
}
package composite.transparent;
import java.util.Enumeration;
public interface Component ...{
public void function();
public void add(Component c);
public void remove(Component c);
public Enumeration components();
}
package composite.transparent;
import java.util.Enumeration;
import java.util.Vector;
import composite.safe.Component;
public class Composite implements Component ...{
private Vector vector = new Vector();
public void function() ...{
System.out.println(this + ".function()");
}
public void add(Component c) ...{
vector.add(c);
}
public void remove(Component c) ...{
vector.remove(c);
}
public Enumeration components() ...{
return vector.elements();
}
}
package composite.transparent;
import java.util.Enumeration;
public class Leaf implements Component ...{
public void function() ...{
System.out.println(this + ".function()");
}
public void add(Component c) ...{
}
public void remove(Component c) ...{
}
public Enumeration components() ...{
return null;
}
}
在合成模式的树结构中,有两种节点,一种是无子节点的树叶节点,一种是有子节点的树枝节点。树枝节点是本模式的核心,可称为合成类。在整个合成模式的类结构中,除了两种节点外,还有它们的公共抽象接口。
合成模式所涉及到的主要内容就是把不同的元件纳入到树中来,并分为两种节点来管理。一个容易理解的例子就是文件系统:在文件系统中,目录可以看作是树枝节点,文件可以看成是树叶节点。
合成模式又可以分为两种:
一种是安全型:在接口中不定义合成类所具有的管理方法,比如add、remove等,这样,树叶节点就不用实现这些方法。这种类型的好处是方法严密,但接口不整齐;
另一种是透明型:在接口中定义合成类所具有的管理方法,这样,合成类和树叶类都要实现这些方法,树叶类所提供的方法当然是无意义的。这种类型的好处是接口整齐,但有些混乱。
以下是这两种类型合成模式的示例:
package composite.safe;
public interface Component ...{
public void function();
}
package composite.safe;
import java.util.*;
public class Composite implements Component ...{
private Vector vector = new Vector();
public void function() ...{
System.out.println(this + ".function()");
}
public void add(Component c) ...{
vector.add(c);
}
public void remove(Component c) ...{
vector.remove(c);
}
public Enumeration components() ...{
return vector.elements();
}
}
package composite.safe;
public class Leaf implements Component ...{
public void function() ...{
System.out.println(this + ".function()");
}
}
package composite.transparent;
import java.util.Enumeration;
public interface Component ...{
public void function();
public void add(Component c);
public void remove(Component c);
public Enumeration components();
}
package composite.transparent;
import java.util.Enumeration;
import java.util.Vector;
import composite.safe.Component;
public class Composite implements Component ...{
private Vector vector = new Vector();
public void function() ...{
System.out.println(this + ".function()");
}
public void add(Component c) ...{
vector.add(c);
}
public void remove(Component c) ...{
vector.remove(c);
}
public Enumeration components() ...{
return vector.elements();
}
}
package composite.transparent;
import java.util.Enumeration;
public class Leaf implements Component ...{
public void function() ...{
System.out.println(this + ".function()");
}
public void add(Component c) ...{
}
public void remove(Component c) ...{
}
public Enumeration components() ...{
return null;
}
}
相关文章推荐
- 结构模式--之--合成模型模式
- 《Java与模式》学习笔记之八---原始模型模式(Prototype Pattern)
- 软件开发和团队”最小模式”初探2-6人模型(下)
- 网络编程之 Socket的模式(二) --- “Linux网络I/O模型”
- ActiveMQ-JMS(四):回调模式下的线程模型
- 模式九(合成模式)
- 《Java设计模式》之合成模式
- 《JAVA与模式》之合成模式
- 讲故事学设计模式-合成(Composite)模式
- 数据库物理模型设计的其他模式之自联结模式
- 并发模型——Future模式
- Java进阶(五)Java I/O模型从BIO到NIO和Reactor模式
- iOS开发—字典转模型,KVC设计模式
- 安全透明的合成模式
- JAVA与模式学习笔记之合成模式
- 事件驱动模型和观察者模式
- ZeroMQ之模式 请求回应模型(Request-Reply)
- 编写实模式多任务操作系统模型之(1)
- 【转】Graphics 关于呈现质量与合成模式
- 设计模式-OOD的设计原则(5)-"合成聚合复用原则"