Composite
Line 1: | Line 1: | ||
− | [[image:Composite.png|frame|Composite | + | [[image:Composite.png|frame|Composite pattern]] |
The Composite pattern is useful whenever one has a class which may contain instances of itself. Common computer science examples are nodes in a tree structure, or shapes in a graphical model. More concrete physical world examples include regions (which can potentially contain many smaller regions), schools of fish (where those fish may swim, eat, etc in a collective fashion), and divisions/teams in a workplace. | The Composite pattern is useful whenever one has a class which may contain instances of itself. Common computer science examples are nodes in a tree structure, or shapes in a graphical model. More concrete physical world examples include regions (which can potentially contain many smaller regions), schools of fish (where those fish may swim, eat, etc in a collective fashion), and divisions/teams in a workplace. | ||
Line 6: | Line 6: | ||
The advantage gained from this structure is that we can transparently use a Composite Instance just as with a Primitive instance. shape.draw(), for example could draw any shape, from a primitive to a highly complex diagram or model. | The advantage gained from this structure is that we can transparently use a Composite Instance just as with a Primitive instance. shape.draw(), for example could draw any shape, from a primitive to a highly complex diagram or model. | ||
+ | |||
+ | |||
+ | == Features == | ||
+ | |||
+ | === Classes === | ||
+ | * Interface (Abstract class) that represents Component. | ||
+ | * Concrete Composite class that implements Component. | ||
+ | * Concrete leaf class that implements Component. | ||
+ | * Client class. | ||
+ | |||
+ | === Attribute === | ||
+ | * Composite maintains a collection of Components. E.g, Collection<Component> | ||
+ | |||
+ | === Methods === | ||
+ | * Component has abstract methods to add and remove an Component to and from. | ||
+ | * Composite has concrete method to add an instance of Component that shared by Composites and leaves on the collection. | ||
+ | * Composite has concrete method to remove an instance of Component that shared by Composites and leaves from the collection. | ||
+ | |||
+ | === Relationships === | ||
+ | * Composite contains both Composite and leaf as Component. | ||
+ | * All Composites and leaves are seen as Component by Client. | ||
+ | |||
+ | == Recognising the pattern == | ||
+ | |||
+ | '''Classes:''' ''Composite'', ''Component'', multiple ''Leaves'' | ||
+ | * Inheritance hierarchy that has a Component interface | ||
+ | * Component interface has declarations for add() and remove() methods for adding/removing Components. | ||
+ | * Composite class has private collection of Components. |
Revision as of 00:13, 5 October 2008
The Composite pattern is useful whenever one has a class which may contain instances of itself. Common computer science examples are nodes in a tree structure, or shapes in a graphical model. More concrete physical world examples include regions (which can potentially contain many smaller regions), schools of fish (where those fish may swim, eat, etc in a collective fashion), and divisions/teams in a workplace.
The key feature of this pattern is a subclass which both extends the superclass, and contains (though an aggregation or composition relationship) a number of instances of the superclass.
The advantage gained from this structure is that we can transparently use a Composite Instance just as with a Primitive instance. shape.draw(), for example could draw any shape, from a primitive to a highly complex diagram or model.
Contents |
Features
Classes
- Interface (Abstract class) that represents Component.
- Concrete Composite class that implements Component.
- Concrete leaf class that implements Component.
- Client class.
Attribute
- Composite maintains a collection of Components. E.g, Collection<Component>
Methods
- Component has abstract methods to add and remove an Component to and from.
- Composite has concrete method to add an instance of Component that shared by Composites and leaves on the collection.
- Composite has concrete method to remove an instance of Component that shared by Composites and leaves from the collection.
Relationships
- Composite contains both Composite and leaf as Component.
- All Composites and leaves are seen as Component by Client.
Recognising the pattern
Classes: Composite, Component, multiple Leaves
- Inheritance hierarchy that has a Component interface
- Component interface has declarations for add() and remove() methods for adding/removing Components.
- Composite class has private collection of Components.