Παράδειγμα προτύπου σχεδίου
Το παρακάτω κείμενο (Σπινέλλης και Ράπτης 2000)
περιγράφει με τη μορφή ενός προτύπου σχεδίου τη σύνδεση εξαρτημάτων:
Component Composition - Structural
Intent
The component composition pattern identifies the primary methods of
encapsulated component composition and integration.
Motivation
Encapsulated components do not operate in a vacuum.
They are composed to create more powerful components and integrated
within an object-based system to provide specialised services.
Moreover, composition of encapsulated components with component glue
can be used to provide
efficient access to off-line data,
graphical user interfaces,
and a multitude of other component-based services.
As an example a spelling checker can be easily constructed by composing
the translate, sort, unique, and common
components, while the gluing of a editbox and listbox components
can be used to provide a GUI front end.
Applicability
Many of the problems solved under the Unix programming environment using shell
programming constructs and pipelines can be transformed to component
composition structures.
Of particular relevance are sequences of filter type components,
where each one receives a data stream, performs some operations on it,
and forwards it to another filter to perform some other operations.
Examples include pipelines of tools that process
text,
images,
sound, and
object code.
Meunier [13] describes a complete pattern language for a
``Pipes and Filters Architecture'' that can be used as a base to
structure applications.
Structure
Figure 4:
A spell checker with a GUI.
Figure 4 depicts the component interaction diagram of
a filter-based spell checker built from Unix-mined and glue components.
The text to be spell-checked is retrieved from the GUI edit box
using a data source glue component.
It is transformed into a list of words using the translate
component which is a direct equivalent of the Unix tr command.
The word list is then transformed into a sorted list of unique words
using the sort and unique components which correspond to the
Unix sort and uniq commands.
At the same time, the system dictionary and a user dictionary are passed
using appropriate file connectors to the merge component
which merges two sorted streams; the merge component is
a specialisation of sort which provides this functionality.
Finally, the two sorted streams of words to be spelled and
acceptable words are checked by common - derived from the
Unix comm command - which outputs a list of words contained
in the first stream and not contained in the second one.
This stream of misspelled words is sent using the ListBoxSink
glue component to a GUI list box.
It is important to note that the integration of GUI elements
using the same component object paradigm and the merging of two
data streams could not be implemented using the standard Unix
linear pipeline system.
Participants
The components composed are object instances of either active process
components that are connected to existing data sources and sinks,
or connector and glue components
(pipes and environment interfacing classes) that provide such sources and sinks.
Consequences
Using the component composition pattern it is possible to implement
sophisticated component interaction topologies.
In addition, it is possible to package together existing components to
provide new standard and reusable components.
Implementations
The implementation of the composition pattern is independent of the
component-framework used.
Most relevant decisions are taken when implementing the
encapsulation and the glue patterns.
Designs based on the composition pattern should be portable across
different component frameworks.