《JAVA与模式》第8天―合成模式 (三)

2014-11-24 08:26:42 · 作者: · 浏览: 2
明和实现,而树叶构件类则没有给出这些方法的声明或实现。这样的做法是安全的做法,由于这个特点,客户端应用程序不可能错误地调用树叶构件的聚集方法,因为树叶构件没有这些方法,调用会导致编译错误。

  安全式合成模式的缺点是不够透明,因为树叶类和树枝类将具有不同的接口。

透明式合成模式的结构
  与安全式的合成模式不同的是,透明式的合成模式要求所有的具体构件类,不论树枝构件还是树叶构件,均符合一个固定接口。

\

源代码
  抽象构件角色类

[java]
package com.bankht.Composite.transparent;

import java.util.List;

/**
* @author: 特种兵—AK47
* @创建时间:2012-6-25 下午10:10:55
*
* @类说明 :抽象构件角色类
*/
public abstract class Component {
/**
* 输出组建自身的名称
*/
public abstract void printStruct(String preStr);

/**
* 聚集管理方法,增加一个子构件对象
*
* @param child
* 子构件对象
*/
public void addChild(Component child) {
/**
* 缺省实现,抛出异常,因为叶子对象没有此功能 或者子组件没有实现这个功能
*/
throw new UnsupportedOperationException("对象不支持此功能");
}

/**
* 聚集管理方法,删除一个子构件对象
*
* @param index
* 子构件对象的下标
*/
public void removeChild(int index) {
/**
* 缺省实现,抛出异常,因为叶子对象没有此功能 或者子组件没有实现这个功能
*/
throw new UnsupportedOperationException("对象不支持此功能");
}

/**
* 聚集管理方法,返回所有子构件对象
*/
public List getChild() {
/**
* 缺省实现,抛出异常,因为叶子对象没有此功能 或者子组件没有实现这个功能
*/
throw new UnsupportedOperationException("对象不支持此功能");
}
}
package com.bankht.Composite.transparent;

import java.util.List;

/**
* @author: 特种兵—AK47
* @创建时间:2012-6-25 下午10:10:55
*
* @类说明 :抽象构件角色类
*/
public abstract class Component {
/**
* 输出组建自身的名称
*/
public abstract void printStruct(String preStr);

/**
* 聚集管理方法,增加一个子构件对象
*
* @param child
* 子构件对象
*/
public void addChild(Component child) {
/**
* 缺省实现,抛出异常,因为叶子对象没有此功能 或者子组件没有实现这个功能
*/
throw new UnsupportedOperationException("对象不支持此功能");
}

/**
* 聚集管理方法,删除一个子构件对象
*
* @param index
* 子构件对象的下标
*/
public void removeChild(int index) {
/**
* 缺省实现,抛出异常,因为叶子对象没有此功能 或者子组件没有实现这个功能
*/
throw new UnsupportedOperationException("对象不支持此功能");
}

/**
* 聚集管理方法,返回所有子构件对象
*/
public List getChild() {
/**
* 缺省实现,抛出异常,因为叶子对象没有此功能 或者子组件没有实现这个功能
*/
throw new UnsupportedOperationException("对象不支持此功能");
}
}

  树枝构件角色类,此类将implements Conponent改为extends Conponent,其他地方无变化。

[java]
package com.bankht.Composite.transparent;

import java.util.ArrayList;
import java.util.List;

/**
* @author: 特种兵—AK47
* @创建时间:2012-6-25 下午10:11:20
*
* @类说明 :树枝构件角色类,此类将implements Conponent改为extends Conponent,其他地方无变化。
*/
public class Composite extends Component {
/**
* 用来存储组合对象中包含的子组件对象
*/
private List childComponents = new ArrayList();
/**
* 组合对象的名字
*/
private String name;

/**
* 构造方法,传入组合对象的名字
*
* @param name
* 组合对象的名字
*/
public Composite(String name) {
this.name = name;
}

/**
* 聚集管理方法,增加一个子构件对象
*
* @param child
* 子构件对象
*/
public void addChild(Component child) {
childComponents.add(child);
}

/**
* 聚集管理方法,删除一个子构件对象
*
* @param index
* 子构件对象的下标
*/
public void removeChild(int index) {
childComponents.remove(index);
}

/**
* 聚集管理方法,返回所有子构件对象
*/
public List getChild() {
return childComponents;
}

/**
* 输出对象的自身结构
*
* @param preStr
* 前缀,主要是按照层级拼接空格,实现向后缩进
*/
@Override
public vo