[关键字]: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
posted on 2009-06-08 22:27
天堂露珠 阅读(1140)
评论(3) 编辑 收藏 所属分类:
Pattern