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