Professional Documents
Culture Documents
Structural Pattern Part-I Introduction
Structural Pattern Part-I Introduction
S. No TOPIC
1
PPT Slides
2
3
Adaptor
Bridge
Composite
L3
32 37
38 40
L5
41 42
Code Examples
L6
43 44
Reference
L7
45 45
UNIT-IV
L1
3 18
L2
19 31
Agenda
L1
What is Adapter?
Intent:
Change the interface of a
class into another interface
which is expected by the
client.
Also Know As:
Wrapper
UNIT-IV
L1
Motivation
UNIT-IV
L1
Structure (Class)
UNIT-IV
L1
Structure (Object)
UNIT-IV
L1
Applicability
Use an existing class whose interface
does not match the requirement
Create a reusable class though the
interfaces are not necessary
compatible with callers
Want to use several existing
subclasses, but it is impractical to
subclass everyone. (Object
Adapter Only)
UNIT-IV
L1
Pros
Cons
UNIT-IV
L1
Cons
Harder to override Adaptee behavior
Requires more code to implement
properly
UNIT-IV
L1
Pluggable Adapters
10
L1
Pluggable Adapters
11
L1
Two-way Adapters
classSquarePeg{
public:
voidvirtualsquarePegOperation(){blah}
}
classPegAdapter:publicSquarePeg,RoundPeg{
public:
voidvirtualroundPegOperation(){
addsomecorners;
squarePegOperation();
classRoundPeg{
public:
voidvirtualsquarePegOperation(){
voidvirtualroundPegOperation(){blah}
addsomecorners;
roundPegOperation();
}
}
UNIT-IV
12
L1
13
L1
Related Patterns
Adapter can be similar to the remote
form of Proxy. However, Proxy doesn't
change interfaces.
Decorator enhances another object
without changing its interface.
Bridge similar structure to Adapter, but
different intent. Separates interface
from implementation.
UNIT-IV
14
L1
Conclusions
Allows collaboration between classes
with incompatible interfaces
Implemented in either class-based
(inheritance) or object-based
(composition & delegation) manner
Useful pattern which promotes reuse
and allows integration of diverse
software components
UNIT-IV
15
L1
Adapter
You have
legacy code
current client
16
L1
Adapter (cont.)
class NewTime
{
public:
int GetTime() {
return m_oldtime.get_time() * 1000 + 8;
}
private:
OldTime m_oldtime;
};
UNIT-IV
17
L2
UNIT-IV
18
L2
Overview
Intent
Also Known As
Motivation
Participants
Structure
Applicability
Benefits
Drawbacks
Related Pattern I
UNIT-IV
19
L2
UNIT-IV
20
L2
Motivation
Entry
oracleDBEntry
FilesysEntry
UNIT-IV
21
L2
Motivation
Entry
Appointment
OracleDBApp.
FilesysApp.
Task
OracleDBTask
UNIT-IV
FilesysTask
22
L2
Motivation
Entry
getText()
setText()
Destroy()
PersistentImp.
impl
initialize()
store()
load()
Destroy()
Bridge
Task
Appointment
getPriority()
setPriority()
getText()
setText()
Destroy()
getAlarm()
setAlarm()
getText()
setText()
Destroy()
OraclePImp AccessPImp
initialize()
store()
load()
destroy()
UNIT-IV
initialize()
store()
load()
destroy()
23
L2
Participants
Abstraction (Entry):
- define the abstractions interface
- maintains a reference to an object of type
Implementor
Refined Abstraction (Task):
- extends the interface defined by Abstraction
UNIT-IV
24
L2
Participants (continue)
Implementor (persistentImp):
- defines an interface for implementation
classes. Typically, this Implementors
interface provides only primitive menthod
ConcreteImplementor (oraclePImp,
AccessPImp):
25
L2
Structure
Client
Implementer
Abstraction
impl
RefinedAbstraction
OperationImp()
ConcreteImplementerA
ConcreteImplementerB
UNIT-IV
26
L2
Applicability
Want to avoid a permanent binding
between an abstraction and
implementation.
When abstractions and
implementations should be extensible
through subclassing.
When implementation changes should
not impact clients.
UNIT-IV
27
L2
Applicability (continue)
When the implementation should be
completely hidden from the client. (C+
+)
When you have a proliferation of
classes.
When, unknown to the client,
implementations are shared among
objects.
UNIT-IV
28
L2
Benefits
Avoid permanent binding between an
abstraction and its implementation
Avoid nested generalizations
Ease adding new implementations
Reduce code repetition
Allow runtime switching of behavior
UNIT-IV
29
L2
Drawbacks
Double indirection
- entry operation are implemented by
subclasses of PersistentImp class. Entry
class must delegate the message to a
PersistentImp subclass which
implements the appropriate method. This
will have a slight impact on performance.
UNIT-IV
30
L2
Composite Pattern
Intent :
Compose objects into tree structures to
represent part-whole hierarchies.
Composite lets clients treat individual
objects and compositions of objects
uniformly.
UNIT-IV
31
L2
Consequences
decoupling interface & implementation
- implementation of abstraction - can be configured at
run-time
- eliminate compile time dependencies on implementation
- encourages layering
improved extensibility
- Abstraction & Implementer - can be extended
independently
32
L3
Composite Pattern
Facilitates the composition of objects
into tree structures that represent partwhole hierarchies.
These hierarchies consist of both
primitive and composite objects.
UNIT-IV
33
L3
UNIT-IV
34
L3
Observations
The Component (Graphic) is an abstract
class that declares the interface for the
objects in the pattern. As the interface, it
declares methods (such as Draw) that are
specific to the graphical objects.
Line, Rectangle, and Text are so-called Leafs,
which are subclasses that implement Draw to
draw lines, rectangles, and text, respectively.
UNIT-IV
35
L3
Observations (Continued)
The Picture class represents a number
of graphics objects. It can call Draw on
its children and also uses children to
compose pictures using primitive
objects.
UNIT-IV
36
L3
Concluding Considerations
The Composite Pattern is used to represent
part-whole object hierarchies.
Clients interact with objects through the
component class.
It enables clients to to ignore the specifics of
which leaf or composite class they use.
Can be used recursively, so that Display can
show both flares and stars.
New components can easily be added to a
design.
UNIT-IV
37
L4
UNIT-IV
38
L4
Motivation
Entry
oracleDBEntry
FilesysEntry
UNIT-IV
39
L4
Motivation
Entry
Appointment
OracleDBApp.
FilesysApp.
Task
OracleDBTask
UNIT-IV
FilesysTask
40
L5
Two-way Adapters
classSquarePeg{
public:
voidvirtualsquarePegOperation(){blah}
}
classPegAdapter:publicSquarePeg,RoundPeg{
public:
voidvirtualroundPegOperation(){
addsomecorners;
squarePegOperation();
classRoundPeg{
public:
voidvirtualsquarePegOperation(){
voidvirtualroundPegOperation(){blah}
addsomecorners;
roundPegOperation();
}
}
UNIT-IV
41
L5
42
L6
Motivation
Entry
getText()
setText()
Destroy()
PersistentImp.
impl
initialize()
store()
load()
Destroy()
Bridge
Task
Appointment
getPriority()
setPriority()
getText()
setText()
Destroy()
getAlarm()
setAlarm()
getText()
setText()
Destroy()
OraclePImp AccessPImp
initialize()
store()
load()
destroy()
UNIT-IV
initialize()
store()
load()
destroy()
43
L6
Participants
Abstraction (Entry):
- define the abstractions interface
- maintains a reference to an object of type
Implementor
Refined Abstraction (Task):
- extends the interface defined by Abstraction
UNIT-IV
44
L7
References
Becker, Dan. Design networked applications in RMI using the Adapter design
pattern. JavaWorld Magazine, May 1999. http://www.javaworld.com/javaworld/jw05-1999/jw-05-networked.html
Buschmann et al. A System of Patterns: Pattern-Oriented Software Architecture.
John Wiley and Sons. Chichester. 1996
Gamma et al. Design Patterns: Elements of Reusable Object-Oriented Software.
Addison-Wesley. Boston. 1995
Nguyen, D.X. Tutorial 10: Stacks and Queues: The Adapter Pattern. Rice
University. 1999. http://www.owlnet.rice.edu/~comp212/99fall/tutorials/10/tutorial10.html
Whitney, Roger. CS 635 Advanced Object-Oriented Design & Programming. San
Diego State University. 2001.
http://www.eli.sdsu.edu/courses/spring01/cs635/notes/proxy/proxy.html#Heading1
0
Shalloway, Alan., and Trott, James R., Design Patterns Explained: A New
Perspective on Object-Oriented Design, Addison-Wesley, 2002.
Rising, Linda., The Patterns Handbook: Techniques, Strategies, and Applications,
Cambridge university Press, 1998.
UNIT-IV
45