人在江湖

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            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
          主站蜘蛛池模板: 十堰市| 河曲县| 遂川县| 齐齐哈尔市| 四子王旗| 炎陵县| 高陵县| 陕西省| 岑巩县| 于都县| 县级市| 南江县| 监利县| 林甸县| 惠安县| 澜沧| 南靖县| 贵德县| 泰顺县| 哈巴河县| 宝山区| 吴川市| 铜川市| 红桥区| 牙克石市| 勐海县| 张掖市| 海淀区| 浑源县| 扎兰屯市| 威海市| 常德市| 青田县| 乐清市| 池州市| 扎兰屯市| 滦南县| 甘孜县| 汕尾市| 海门市| 大方县|