構造設計モードの組合せモード
2995 ワード
ぶんかつ
区別する
透明コンビネーションモード
抽象コンポーネントComponentには、add()、remove()、getChild()など、メンバー・オブジェクトを管理するためのすべてのメソッドが宣言されています.これにより、すべてのコンポーネント・クラスに同じインタフェースがあることが保証されます.クライアントから見れば、リーフ・オブジェクトはコンテナ・オブジェクトが提供するメソッドと一致し、クライアントはすべてのオブジェクトを一貫して扱うことができます.
セキュアコンビネーションモード
抽象コンポーネントComponentは、ユーザーがメンバー・オブジェクトを管理する方法を宣言するのではなく、Componentでこれらの方法を宣言して実装します.この方法は、これらの管理メンバーオブジェクトをリーフオブジェクトにまったく提供しないため、リーフオブジェクトの場合、クライアントがこれらのメソッドを呼び出すことはできません.
xml :
public interface Component {
public void findContent(String conent);
}
public class Leaf implements Component {
private String name;
private String content;
public Leaf(String name,String content) {
this.name = name;
this.content = content;
}
@Override
public void findContent(String conent) {
if(this.content.equals(conent)){
System.out.print( " :" + this.name + " " + conent + ", :");
}else{
System.out.println( name + " " + conent);
}
}
}
public class Composite implements Component {
private ArrayList list = new ArrayList();
private String name;
public Composite(String name) {
this.name = name;
}
//
public void add(Component component){
list.add(component);
}
//
public void remove(Component component){
list.remove(component);
}
//
public Component getChild(Integer index){
return list.get(index);
}
@Override
public void findContent(String conent) {
System.out.print(" " + this.name + ",");
for (Component component: list){
component.findContent(conent);
}
System.out.print(this.name + "