每天一个设计模式之composite
来源:互联网 发布:黄景瑜是淘宝什么模特 编辑:程序博客网 时间:2024/05/01 12:58
这篇文章是参考的wiki:
http://en.wikipedia.org/wiki/Composite_pattern
首先来看一个例子:
一个绘图软件,可以画出椭圆形,也可以画一个包含多种图形的组合图形(椭圆形,三角形,正方形等等)。
有一个Graphic接口,椭圆形,正方形,三角形都实现了这个接口。
从下面的代码我们可以看出composite的意义:对于客户程序来说,打印椭圆形和打印组合图形的语句都是一样的(graphic.print())。
也就是文中提到的:在composite模式中,对待单个对象和对待一组对象的方式是一样的。
实现的方式也很简单:
1,单个对象leaf实现,print()接口;
2,组合对象中有一个collection,存储了多个graphic对象;
3,组合对象同时也实现了print接口,只不过内容是循环将collection中的每个对象print出来。
4,组合对象可以添加,删除graphic对象。
import java.util.List;import java.util.ArrayList; /** "Component" */interface Graphic { //Prints the graphic. public void print();} /** "Composite" */class CompositeGraphic implements Graphic { //Collection of child graphics. private List<Graphic> childGraphics = new ArrayList<Graphic>(); //Prints the graphic. public void print() { for (Graphic graphic : childGraphics) { graphic.print(); } } //Adds the graphic to the composition. public void add(Graphic graphic) { childGraphics.add(graphic); } //Removes the graphic from the composition. public void remove(Graphic graphic) { childGraphics.remove(graphic); }} /** "Leaf" */class Ellipse implements Graphic { //Prints the graphic. public void print() { System.out.println("Ellipse"); }} /** Client */public class Program { public static void main(String[] args) { //Initialize four ellipses Ellipse ellipse1 = new Ellipse(); Ellipse ellipse2 = new Ellipse(); Ellipse ellipse3 = new Ellipse(); Ellipse ellipse4 = new Ellipse(); //Initialize three composite graphics CompositeGraphic graphic = new CompositeGraphic(); CompositeGraphic graphic1 = new CompositeGraphic(); CompositeGraphic graphic2 = new CompositeGraphic(); //Composes the graphics graphic1.add(ellipse1); graphic1.add(ellipse2); graphic1.add(ellipse3); graphic2.add(ellipse4); graphic.add(graphic1); graphic.add(graphic2); //Prints the complete graphic (four times the string "Ellipse"). graphic.print(); }}
- 每天一个设计模式之composite
- 每天一个设计模式之composite
- 设计模式之Composite
- 设计模式之Composite
- 设计模式之Composite
- 设计模式之 composite
- 每天一个设计模式之代理模式
- 每天一个设计模式之观察者模式
- 设计模式之Composite模式
- 设计模式之composite模式
- 每天一个设计模式之Template Method
- 每天一个设计模式之Singleton
- 每天一个设计模式之Factory
- 每天一个设计模式之strategy
- 每天一个设计模式之Adapter
- 每天一个设计模式之proxy
- 每天一个设计模式之Decorator
- 每天一个设计模式之Flyweight
- 学习笔记:简单验证码
- Visual studio 中使用ZenCoding
- 焦点在子Activity时ActivityGroup无法显示menu的问题
- 代码大全读书笔记(二)
- 山区行
- 每天一个设计模式之composite
- 集合
- qemu针对设备加snapshot
- 面试训练打印数组
- 代码大全读书笔记(三)
- OOP
- 七夕感怀
- 字符串的用法
- SAP 之 库存管理