合成模式-安全的2011-12-29 blogjava 天堂露珠[关键字]:java,design pattern,设计模式,《Java与模式》学习,composite,合成模式[环境]:StarUML5.0 + JDK6[作者]:Winty (wintys@gmail.com) http://www.blogjava.net/wintys/[正文]:安全的合成模式安全的合成模式

package pattern.composite.safe;import java.util.*;/** * 安全的合成模式:Composite Pattern * @version 2009-6-3 * @author Winty(wintys@gmail.com) */public class SafeCompositeTest{ public static void main(String[] args){ Graphics g1 , g2; Picture 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();}/** * Leaf角色 */class Line implements Graphics{ @Override public void draw(){ System.out.println("draw a line."); }}/** * Leaf角色 */class Circle implements Graphics{ @Override public void draw(){ System.out.println("draw a circle"); }}/** * 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(); } } public void add(Graphics g){ graphics.add(g); } public void remove(int i){ graphics.remove(i); } public Graphics getChild(int i){ return graphics.get(i); }}
运行结果:draw a line.draw a circledraw a line.draw a circledraw a line.draw a circledraw a line.draw a circle