合成模型模式

    合成模型模式属于对象的结构模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系,合成模式可以使客户端将单纯元素与复合元素同等看待。

    在合成模式的树结构中,有两种节点,一种是无子节点的树叶节点,一种是有子节点的树枝节点。树枝节点是本模式的核心,可称为合成类。在整个合成模式的类结构中,除了两种节点外,还有它们的公共抽象接口。

    合成模式所涉及到的主要内容就是把不同的元件纳入到树中来,并分为两种节点来管理。一个容易理解的例子就是文件系统:在文件系统中,目录可以看作是树枝节点,文件可以看成是树叶节点。

    合成模式又可以分为两种:

    一种是安全型:在接口中不定义合成类所具有的管理方法,比如addremove等,这样,树叶节点就不用实现这些方法。这种类型的好处是方法严密,但接口不整齐;

    另一种是透明型:在接口中定义合成类所具有的管理方法,这样,合成类和树叶类都要实现这些方法,树叶类所提供的方法当然是无意义的。这种类型的好处是接口整齐,但有些混乱。

    以下是这两种类型合成模式的示例: 

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;
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值