Applet Graphical User Interface Event

Download Report

Transcript Applet Graphical User Interface Event

Design Patterns
Part IV
(TIC++V2:C10)
Yingcai Xiao
10/01/08
Design Patterns (What?)
• The original paper by the gang of four
http://www.cse.msu.edu/~cse870/Materials/Pattern
s/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.
Characteristics 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
More Characteristics
• reusable: reuse at the design level, generic,
well-documented
• object-oriented: uses classes, objects,
generalization, and polymorphism
Constructing 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
Types 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
Types 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)
Design Pattern Space
Example: Proxy Pattern
•
•
Proxy: provides a surrogate to hide the real object behind.
Applications:
1. remote proxy: to represent a remote object locally for easy
and efficient coding (e.g. Java RMI and .NET Remoting)
2. protection proxy: to control the access to the real object
(e.g. a proxy server hides the real server behind the firewall)
3. virtual proxy: to defer the expansive actions creating the
real object.
4. smart reference: replacement for bare pointer that performs
additional actions when an object is accessed
Example: Virtual Proxy
from the original paper by the gang of four
using OMT Notation (object diagram)
Referes to
Referes to
(virtual representation)
Class Diagram of the Virtual Image Proxy
General Structure of a Proxy
Class
Diagram
Object Diagram
Components of a Proxy
• Proxy:
– maintains a reference to let proxy access the
real subject
– provides an interface identical to Subject’s so a
proxy can be substituted for the real subject
– controls access to the real subject; may be
responsible for creating and deleting it
More 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
Collaborations
• Proxy forwards request to RealSubject
when appropriate, depending on the kind of
proxy
Sequence Diagram
Collaboration Diagram
Consequences
• 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
Implementation
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 doesn’t have to know the type of the
real object (upcasted to Object in Java)
Sample Code in Java
public class Proxy implements Subject {
RealSubject refersTo;
public void Request ( ) {
if (refersTo = = null)
refersTo = new RealSubject ( );
refersTo.Request ( );
}
}
Known 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
Related 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
Proxy 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 << "Implementation.f()" << endl; }
void g() { cout << "Implementation.g()" << endl; }
void h() { cout << "Implementation.h()" << endl; }
};
Proxy 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->f(); }
void g() { implementation->g(); }
void h() { implementation->h(); }
};
int main() {
Proxy p;
p.f();
p.g();
p.h();
} ///:~