1
Structural Patterns
Decorator
Facade
Structural patterns
2
Describe ways to assemble objects to realize
new functionality
Added flexibility inherent in object composition due
to ability to change composition at run-time
not possible with static class composition
Structural Patterns
3
Adapter:
Translator adapts a server interface for a client
Bridge:
Abstraction for binding one of many implementations
Composite:
Structure for building recursive aggregations
Decorator:
Decorator extends an object transparently
Facade:
Simplifies the interface for a subsystem
Flyweight:
Many fine-grained objects shared efficiently.
Proxy:
One object approximates another
Decorator Pattern
Decorator pattern
5
Decorator pattern allows a user to add new
functionality to an existing object without
altering its structure.
This type of design pattern comes under
structural pattern as this pattern acts as a
wrapper to existing class.
This pattern creates a decorator class
which wraps the original class and
provides additional functionality keeping
class methods signature intact.
Intent
6
The intent of this pattern is to add
additional responsibilities dynamically to
an object.
Structure
7
Participants
8
Component - Interface for objects that can
have responsibilities added to them dynamically.
ConcreteComponent - Defines an object to
which additional responsibilities can be added.
Decorator - Maintains a reference to a
Component object and defines an interface that
conforms to Component's interface.
Concrete Decorators - Concrete Decorators
extend the functionality of the component by
adding state or adding behavior.
Consequences
9
Good:
Decoration is more convenient for adding
functionalities to objects instead of entire
classes at runtime.
With decoration it is also possible to remove
the added functionalities dynamically.
Bad:
Decoration adds functionality to objects at
runtime which would make debugging
system functionality harder.
Example
10
we will decorate a shape with some color without alter shape class.
Sample cod
e
Example
create a Shape interface and concrete
11
classes implementing the Shape
interface.
We will then create an abstract
decorator class ShapeDecorator
implementing the Shape interface and
having Shape object as its instance
variable.
RedShapeDecorator is concrete class
implementing ShapeDecorator.
DecoratorPatternDemo, our demo class
will use RedShapeDecorator to decorate
Shape objects
12
Faade Pattern
Faade
13
Intent
Provide a unified interface to a set of interfaces in a subsystem.
Faade defines a higher-level interface that makes the subsystem easier to
use.
Applicability
Provides a simple interface to a complex subsystem.
Decouples the details of a subsystem from clients and other
subsystems.
Provides a layered approach to subsystems.
Intent
14
Provide a unified interface to a set of
interfaces in a subsystem. Facade
defines a higher-level interface that
makes the subsystem easier to use.
Wrap a complicated subsystem with a
simpler interface.
Faade
15
Participants
Faade
Knows which classes are responsible for each request.
Delegates client requests to appropriate objects.
Subsystem classes
Implement subsystem functionality.
Handle work assigned by the Faade object.
Have no knowledge of the faade.
Collaborations
Clients communicate with the subsystem sending requests to the Faade.
Reduces the number of classes the client deals with.
Simplifies the subsystem.
Clients do not have to access subsystem objects directly.
Facade pattern
16
Facade pattern hides the complexities of the
system and provides an interface to the client
using which the client can access the system.
This type of design pattern comes under
structural pattern as this pattern adds an
interface to existing system to hide its
complexities.
This pattern involves a single class which
provides simplified methods required by client
and delegates calls to methods of existing
system classes.
Implementation
17
We are going to create a Shape interface
and concrete classes implementing the
Shape interface. A facade class
ShapeMaker is defined as a next step.
ShapeMaker class uses the concrete
classes to delegate user calls to these
classes. FacadePatternDemo, our demo
class, will use ShapeMaker class to show
the results.
Example
18
Sample Co
de
19
Facade (Non software
example)
Provide a unified
interface to a set
of interfaces in a
subsystem.