毎日1つの設計モードのcomposite
この記事は参考にしたwikiです.
http://en.wikipedia.org/wiki/Composite_pattern
まず例を見てみましょう
楕円形を描くか、複数の図形を含む組み合わせの図形(楕円形、三角形、正方形など)を描くことができます.
Graphicインタフェースがあり、楕円形、正方形、三角形がこのインタフェースを実現しています.
次のコードからcompositeの意味がわかります.クライアントプログラムにとって、楕円形と印刷コンビネーショングラフィックの文は同じです(graphic.print().
すなわち、compositeモードでは、単一のオブジェクトと1つのオブジェクトのセットを扱う方法は同じです.
実現方法も簡単です.
1,単一オブジェクトleaf実装,print()インタフェース;
2、コンビネーションオブジェクトにはcollectionがあり、複数のgraphicオブジェクトが格納されている.
3,コンビネーションオブジェクトはprintインタフェースも実現しているが,コンテンツはcollection中の各オブジェクトをループさせるだけである.
4、コンビネーションオブジェクトはgraphicオブジェクトを追加、削除できます.
http://en.wikipedia.org/wiki/Composite_pattern
まず例を見てみましょう
楕円形を描くか、複数の図形を含む組み合わせの図形(楕円形、三角形、正方形など)を描くことができます.
Graphicインタフェースがあり、楕円形、正方形、三角形がこのインタフェースを実現しています.
次のコードからcompositeの意味がわかります.クライアントプログラムにとって、楕円形と印刷コンビネーショングラフィックの文は同じです(graphic.print().
すなわち、compositeモードでは、単一のオブジェクトと1つのオブジェクトのセットを扱う方法は同じです.
実現方法も簡単です.
1,単一オブジェクトleaf実装,print()インタフェース;
2、コンビネーションオブジェクトにはcollectionがあり、複数のgraphicオブジェクトが格納されている.
3,コンビネーションオブジェクトはprintインタフェースも実現しているが,コンテンツはcollection中の各オブジェクトをループさせるだけである.
4、コンビネーションオブジェクトはgraphicオブジェクトを追加、削除できます.
import java.util.List;
import java.util.ArrayList;
/** "Component" */
interface Graphic {
//Prints the graphic.
public void print();
}
/** "Composite" */
class CompositeGraphic implements Graphic {
//Collection of child graphics.
private List<Graphic> childGraphics = new ArrayList<Graphic>();
//Prints the graphic.
public void print() {
for (Graphic graphic : childGraphics) {
graphic.print();
}
}
//Adds the graphic to the composition.
public void add(Graphic graphic) {
childGraphics.add(graphic);
}
//Removes the graphic from the composition.
public void remove(Graphic graphic) {
childGraphics.remove(graphic);
}
}
/** "Leaf" */
class Ellipse implements Graphic {
//Prints the graphic.
public void print() {
System.out.println("Ellipse");
}
}
/** Client */
public class Program {
public static void main(String[] args) {
//Initialize four ellipses
Ellipse ellipse1 = new Ellipse();
Ellipse ellipse2 = new Ellipse();
Ellipse ellipse3 = new Ellipse();
Ellipse ellipse4 = new Ellipse();
//Initialize three composite graphics
CompositeGraphic graphic = new CompositeGraphic();
CompositeGraphic graphic1 = new CompositeGraphic();
CompositeGraphic graphic2 = new CompositeGraphic();
//Composes the graphics
graphic1.add(ellipse1);
graphic1.add(ellipse2);
graphic1.add(ellipse3);
graphic2.add(ellipse4);
graphic.add(graphic1);
graphic.add(graphic2);
//Prints the complete graphic (four times the string "Ellipse").
graphic.print();
}
}