人在江湖

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            82 Posts :: 10 Stories :: 169 Comments :: 0 Trackbacks

          Motivation

          When dealing with tree-structured data, programmers often have to discriminate between a leaf-node and a branch. This makes code more complex, and therefore, error prone. The solution is an interface that allows treating complex and primitive objects uniformly. In object-oriented programming, a composite is an object designed as a composition of one-or-more similar objects, all exhibiting similar functionality. This is known as a "[2]. The key concept is that you can manipulate a single instance of the object just as you would manipulate a group of them. The operations you can perform on all the composite objects often have a least common denominator relationship. For example, if defining a system to portray grouped shapes on a screen, it would be useful to define resizing a group of shapes to have the same effect (in some sense) as resizing a single shape.

             1: import java.util.ArrayList;
             2:  
             3: /** "Component" */
             4: interface Graphic {
             5:  
             6:     //Prints the graphic.
             7:     public void print();
             8: }
             9:  
            10: /** "Composite" */
            11: class CompositeGraphic implements Graphic {
            12:  
            13:     //Collection of child graphics.
            14:     private List<Graphic> mChildGraphics = new ArrayList<Graphic>();
            15:  
            16:     //Prints the graphic.
            17:     public void print() {
            18:         for (Graphic graphic : mChildGraphics) {
            19:             graphic.print();
            20:         }
            21:     }
            22:  
            23:     //Adds the graphic to the composition.
            24:     public void add(Graphic graphic) {
            25:         mChildGraphics.add(graphic);
            26:     }
            27:  
            28:     //Removes the graphic from the composition.
            29:     public void remove(Graphic graphic) {
            30:         mChildGraphics.remove(graphic);
            31:     }
            32: }
            33:  
            34: /** "Leaf" */
            35: class Ellipse implements Graphic {
            36:  
            37:     //Prints the graphic.
            38:     public void print() {
            39:         System.out.println("Ellipse");
            40:     }
            41: }
            42:  
            43: /** Client */
            44: public class Program {
            45:  
            46:     public static void main(String[] args) {
            47:         //Initialize four ellipses
            48:         Ellipse ellipse1 = new Ellipse();
            49:         Ellipse ellipse2 = new Ellipse();
            50:         Ellipse ellipse3 = new Ellipse();
            51:         Ellipse ellipse4 = new Ellipse();
            52:  
            53:         //Initialize three composite graphics
            54:         CompositeGraphic graphic = new CompositeGraphic();
            55:         CompositeGraphic graphic1 = new CompositeGraphic();
            56:         CompositeGraphic graphic2 = new CompositeGraphic();
            57:  
            58:         //Composes the graphics
            59:         graphic1.add(ellipse1);
            60:         graphic1.add(ellipse2);
            61:         graphic1.add(ellipse3);
            62:  
            63:         graphic2.add(ellipse4);
            64:  
            65:         graphic.add(graphic1);
            66:         graphic.add(graphic2);
            67:  
            68:         //Prints the complete graphic (four times the string "Ellipse").
            69:         graphic.print();
            70:     }
            71: }
          posted on 2011-02-13 20:30 人在江湖 閱讀(705) 評論(0)  編輯  收藏 所屬分類: design pattern
          主站蜘蛛池模板: 古丈县| 延川县| 会昌县| 当雄县| 龙江县| 肥西县| 济南市| 汉川市| 苍山县| 驻马店市| 宁津县| 如皋市| 饶河县| 石泉县| 利津县| 大宁县| 桂东县| 于田县| 长宁县| 牙克石市| 合山市| 长治县| 嘉鱼县| 伊宁县| 静安区| 临颍县| 六枝特区| 许昌县| 福海县| 安国市| 定远县| 开远市| 万盛区| 磐石市| 齐齐哈尔市| 婺源县| 长丰县| 松桃| 曲水县| 远安县| 克东县|