结构模式之合成模式注解
2011-10-19 08:10
375 查看
合成模式主要是针对树型结构进行的一种模式的界定,一般只要业务需求中含有树型结构都可以考虑用这种模式。
合成模式可以分为安全的合成模式和透明的合成模式。
安全的合成模式是指叶子节点不含有增删操作,而只有树枝节点才会有对应的增删节点的操作。
安全的合成模式的静态UML类图结构如下图所示:
下面是安全的合成模式的参考性代码:
构件Component角色代码如下:
public interface Component {
//返回自己的实例,可以考虑再加一些方法比如返回父节点的实例
CompositegetComposite();
void sampleOperation();
}
树枝节点Composite的代码如下:
public class Composite implements Component {
private Vector componentVector =
new java.util.Vector();
public CompositegetComposite(){
return this;
}
public void sampleOperation(){
java.util.Enumerationenumeration = components();
while(enumeration.hasMoreElements()) {
((Component)enumeration.nextElement()).sampleOperation();
}
}
public void add(Componentcomponent){
componentVector.addElement(component);
}
public void remove(Componentcomponent){
componentVector.removeElement(component);
}
public Enumerationcomponents(){
return componentVector.elements();
}
}
叶子节点Leaf的代码如下:
public class Leaf implements Component {
//返回父节点对象
public CompositegetComposite(){
// Write your code here
return null;
}
public void sampleOperation(){
// Write your code here
}
}
透明的合成模式是将叶子当成一般的树枝节点看待,然后将树枝节点中所拥有的如增加删除这样的操作提升到抽象层,从而使树枝和叶子节点统一。
下面为透明式合成模式的UML类图结构:
下面给出透明式合成模式的参考实现代码:
抽象构件的代码如下:
public interface Component
{
void sampleOperation();
CompositegetComposite();
void add(Componentcomponent);
void remove(Componentcomponent);
Enumerationcomponents();
}
树枝节点代码如下:
public class Composite implements Component
{
private Vector componentVector =
new java.util.Vector();
public CompositegetComposite()
{
return this;
}
public void sampleOperation()
{
java.util.Enumerationenumeration = components();
while(enumeration.hasMoreElements())
{
((Component)enumeration.nextElement()).sampleOperation();
}
}
public void add(Componentcomponent)
{
componentVector.addElement(component);
}
public void remove(Componentcomponent)
{
componentVector.removeElement(component);
}
public Enumerationcomponents()
{
return componentVector.elements();
}
}
叶子节点的代码如下:
public class Leaf implements Component
{
private Vector componentVector =
new java.util.Vector();
public void sampleOperation()
{
// Write your code here
}
public void add(Componentcomponent)
{
componentVector.addElement(component);
}
public void remove(Componentcomponent)
{
componentVector.removeElement(component);
}
public CompositegetComposite()
{
// Write your code here
return null;
}
public Enumerationcomponents()
{
// Write your code here
return null;
}
}
在实际使用中,是可以对节点指定父节点的,这样就可以向上追述关系了。当然也仍然是可以在树枝节点中指定其包含的叶子节点以及所拥有的树枝节点。
合成模式可以分为安全的合成模式和透明的合成模式。
安全的合成模式是指叶子节点不含有增删操作,而只有树枝节点才会有对应的增删节点的操作。
安全的合成模式的静态UML类图结构如下图所示:
下面是安全的合成模式的参考性代码:
构件Component角色代码如下:
public interface Component {
//返回自己的实例,可以考虑再加一些方法比如返回父节点的实例
CompositegetComposite();
void sampleOperation();
}
树枝节点Composite的代码如下:
public class Composite implements Component {
private Vector componentVector =
new java.util.Vector();
public CompositegetComposite(){
return this;
}
public void sampleOperation(){
java.util.Enumerationenumeration = components();
while(enumeration.hasMoreElements()) {
((Component)enumeration.nextElement()).sampleOperation();
}
}
public void add(Componentcomponent){
componentVector.addElement(component);
}
public void remove(Componentcomponent){
componentVector.removeElement(component);
}
public Enumerationcomponents(){
return componentVector.elements();
}
}
叶子节点Leaf的代码如下:
public class Leaf implements Component {
//返回父节点对象
public CompositegetComposite(){
// Write your code here
return null;
}
public void sampleOperation(){
// Write your code here
}
}
透明的合成模式是将叶子当成一般的树枝节点看待,然后将树枝节点中所拥有的如增加删除这样的操作提升到抽象层,从而使树枝和叶子节点统一。
下面为透明式合成模式的UML类图结构:
下面给出透明式合成模式的参考实现代码:
抽象构件的代码如下:
public interface Component
{
void sampleOperation();
CompositegetComposite();
void add(Componentcomponent);
void remove(Componentcomponent);
Enumerationcomponents();
}
树枝节点代码如下:
public class Composite implements Component
{
private Vector componentVector =
new java.util.Vector();
public CompositegetComposite()
{
return this;
}
public void sampleOperation()
{
java.util.Enumerationenumeration = components();
while(enumeration.hasMoreElements())
{
((Component)enumeration.nextElement()).sampleOperation();
}
}
public void add(Componentcomponent)
{
componentVector.addElement(component);
}
public void remove(Componentcomponent)
{
componentVector.removeElement(component);
}
public Enumerationcomponents()
{
return componentVector.elements();
}
}
叶子节点的代码如下:
public class Leaf implements Component
{
private Vector componentVector =
new java.util.Vector();
public void sampleOperation()
{
// Write your code here
}
public void add(Componentcomponent)
{
componentVector.addElement(component);
}
public void remove(Componentcomponent)
{
componentVector.removeElement(component);
}
public CompositegetComposite()
{
// Write your code here
return null;
}
public Enumerationcomponents()
{
// Write your code here
return null;
}
}
在实际使用中,是可以对节点指定父节点的,这样就可以向上追述关系了。当然也仍然是可以在树枝节点中指定其包含的叶子节点以及所拥有的树枝节点。
相关文章推荐
- 结构模式之适配器模式注解
- java 设计模式-结构模式之合成模式
- Java 模式3(结构模式) - 适配器模式,缺省适配器模式,合成模式, 装饰模式,代理模式
- 结构模式--之--合成模型模式
- 结构模式之门面模式注解
- 九、 合成(Composite)模式 --结构模式(Structural Pattern)
- 结构模式之享元模式注解
- 结构模式(Structural Pattern)==合成模式(Composite Pattern)
- 结构模式之代理模式注解
- 《Java与模式》学习笔记:设计模式——树结构(合成模式+模板模式)
- 结构模式之桥梁模式注解
- 结构模式之装饰模式注解
- [JAVA设计模式]第三部分:结构模式
- 设计模式c#语言描述——合成(Composite)模式
- 80x86微处理器结构及其工作模式
- Magento的数据库结构:EVA模式(实体-属性-值)
- 设计模式之合成/聚合利用原则(CARP)
- MyBatis注解模式取参数方法
- jQuery插件开发的模式和结构
- Factory Method模式角色与结构