[原]合成模式-透明的

xiaoxiao2026-10-08  4

[关键字]: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
转载请注明原文地址: https://www.6miu.com/read-5053799.html

最新回复(0)