[关键字]:java,design pattern,设计模式,《Java与模式》学习,composite,合成模式 [环境]:StarUML5.0 + JDK6 [作者]:Winty (wintys@gmail.com) http://www.blogjava.net/wintys/ [正文]: 透明的合成模式
package pattern.composite.transparent; import java.util.*; /** * 透明的合成模式:Composite Pattern * @version 2009-6-3 * @author Winty(wintys@gmail.com) */ public class TransparentCompositeTest{ public static void main(String[] args){ Graphics g1 , g2; Graphics p1 , p2; g1 = new Line(); g2 = new Circle(); p1 = new Picture(); p2 = new Picture(); g1.draw(); g2.draw(); System.out.println(""); p1.add(g1); p1.add(g2); p1.draw(); System.out.println(""); p2.add(g1); p2.add(g2); p2.add(p1); p2.draw(); } } /** * 抽象Component角色 */ interface Graphics{ void draw(); void add(Graphics g); void remove(int i); Graphics getChild(int i); } /** * Leaf角色 */ class Line implements Graphics{ @Override public void draw(){ System.out.println("draw a line"); } @Override public void add(Graphics g){ } @Override public void remove(int i){ } @Override public Graphics getChild(int i){ return null; } } /** * Leaf角色 */ class Circle implements Graphics{ @Override public void draw(){ System.out.println("draw a circle"); } @Override public void add(Graphics g){ } @Override public void remove(int i){ } @Override public Graphics getChild(int i){ return null; } } /** * Composite角色 */ class Picture implements Graphics{ private List<Graphics> graphics; public Picture(){ graphics = new ArrayList<Graphics>(); } @Override public void draw(){ Iterator<Graphics> it = graphics.iterator(); while(it.hasNext()){ Graphics g = it.next(); g.draw(); } } @Override public void add(Graphics g){ graphics.add(g); } @Override public void remove(int i){ graphics.remove(i); } @Override public Graphics getChild(int i){ return graphics.get(i); } }运行结果:
draw a line draw a circle draw a line draw a circle draw a line draw a circle draw a line draw a circle