Title: Design Patterns Part IV (TIC V2:C10)
1Design PatternsPart IV (TICV2C10)
2Design Patterns (What?)
- The original paper by the gang of four
- http//www.cse.msu.edu/cse870/Materials/Patterns
/Docs/orig-patterns-paper.pdf - Design Patterns are devices that allow designers
to share knowledge about their design. Design
patterns identify, name, and abstract common
themes in object-oriented design. - idea reuse vs. code reuse.
3Characteristics of a Design Pattern
- smart elegant solutions that would not occur to
a novice immediately - generic independent of specific system
characteristics - well-proven identified from successful real,
object-oriented systems - simple involve only a handful of classes
4More Characteristics
- reusable reuse at the design level, generic,
well-documented - object-oriented uses classes, objects,
generalization, and polymorphism
5Constructing a Design Pattern
- name
- problem description when pattern is to be used
and which problem it attempts to solve - solution classes and objects, their structure,
and dynamic collaboration - consequences results and trade-offs of applying
the pattern
6Types of Patterns (Purpose)
- Categorize patterns by what they do.
- creational deal with the process of object
creation - structural deal with the composition of classes
or objects - behavioral describe ways in which classes or
objects interact and allocate responsibilities
7Types of Patterns (Scope)
- Scope specifies whether a pattern applies
primarily to classes or to objects. - Class scope deals with relationship between
classes, established through inheritance.
(static) - Object scope deals with object relationship,
established through inclusion and usage. (dynamic)
8Design Pattern Space
9- Proxy provides a surrogate to hide the real
object behind. - Applications
- remote proxy to represent a remote object
locally for easy and efficient coding (e.g. Java
RMI and .NET Remoting) - protection proxy to control the access to the
real object (e.g. a proxy server hides the real
server behind the firewall) - virtual proxy to defer the expansive actions
creating the real object. - smart reference replacement for bare pointer
that performs additional actions when an object
is accessed
10Example Virtual Proxyfrom the original paper by
the gang of fourusing OMT Notation (object
diagram)
Referes to (virtual representation)
Referes to
11Class Diagram of the Virtual Image Proxy
12General Structure of a Proxy
Class Diagram
Object Diagram
13Components of a Proxy
- Proxy
- maintains a reference to let proxy access the
real subject - provides an interface identical to Subjects so a
proxy can be substituted for the real subject - controls access to the real subject may be
responsible for creating and deleting it
14More Participants
- Subject
- defines the common interface for RealSubject and
Proxy so a Proxy can be used anywhere a
RealSubject is expected - RealSubject
- defines the real object that the proxy represents
15Collaborations
- Proxy forwards request to RealSubject when
appropriate, depending on the kind of proxy
16Sequence Diagram
17Collaboration Diagram
18Consequences
- proxy pattern introduces a level of indirection
when accessing an object - a remote proxy can hide the fact that an object
resides in a different address space - a virtual proxy can perform optimizations such as
creating an object on demand - protection proxies and smart references allow
additional tasks when an object is referenced
19Implementation
- A proxy can exploit the following features
- Java use interface and implementation.
- C use virtual functions and overloading the
member access operators. - Smalltalk use doesNotUnderstand, which supports
automatic forwarding of requests - Proxy doesnt have to know the type of the real
object (upcasted to Object in Java)
20Sample Code in Java
- public class Proxy implements Subject
- RealSubject refersTo
- public void Request ( )
- if (refersTo null)
- refersTo new RealSubject ( )
- refersTo.Request ( )
-
21Known Uses
- Stubs in Java RMI.
- Proxy server in networking
- NEXTSTEP uses proxies as local representatives
for objects that may be distributed - Proxies in Smalltalk to access remote objects
22Related Patterns
- adapter provides a different interface to the
object it adapts proxy provides the same
interface as its subject - decorator adds one or more responsibilities to
an object proxy controls access to an object - a protection proxy might be implemented exactly
like a decorator
23Proxy Example in C
class ProxyBase public virtual void f()
0 virtual void g() 0 virtual void h()
0 virtual ProxyBase() class
Implementation public ProxyBase public
void f() cout ltlt "Implementation.f()" ltlt endl
void g() cout ltlt "Implementation.g()" ltlt
endl void h() cout ltlt "Implementation.h()"
ltlt endl
24Proxy Example in C
class Proxy public ProxyBase ProxyBase
implementation public Proxy()
implementation new Implementation()
Proxy() delete implementation // Forward
calls to the implementation void f()
implementation-gtf() void g()
implementation-gtg() void h()
implementation-gth() int main()
Proxy p p.f() p.g() p.h()
///