Welcome

首页 / 软件开发 / 数据结构与算法 / 合成模式-安全的

合成模式-安全的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 circle

draw a line.

draw a circle

draw a line.

draw a circle

draw a line.

draw a circle