人在江湖

  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 "has-a" relationship between objects[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 人在江湖 阅读(664) 评论(0)  编辑  收藏 所属分类: design pattern

只有注册用户登录后才能发表评论。


网站导航: