composite(转)

    技术2025-07-10  25

    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 mChildGraphics = new ArrayList(); 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: }
    最新回复(0)