CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2002 Prototype, Flyweight, Facade |
||
---|---|---|
© 2002, All Rights Reserved, SDSU & Roger Whitney San Diego State University -- This page last updated 30-Apr-02 |
Prototype
Intent
Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype
Applicability
Use the Prototype pattern when
Insurance Example
Insurance agents start with a standard policy and customize it
Two basic strategies:
Copying Issues
Shallow Copy Verse Deep Copy
Original Objects
Shallow Copy
Shallow Copy Verse Deep Copy
Original Objects
Deep Copy
Shallow Copy Verse Deep CopyOriginal Objects
Deeper Copy
Cloning Issues
How to in C++ - Copy Constructors class Door { public: Door(); Door( const Door&); virtual Door* clone() const; virtual void Initialize( Room*, Room* ); // stuff not shown private: Room* room1; Room* room2; } Door::Door ( const Door& other ) //Copy constructor { room1 = other.room1; room2 = other.room2; } Door* Door::clone() const { return new Door( *this ); }
How to in Java - Object clone()
protected Object clone() throws CloneNotSupportedException
class Door implements Cloneable { public void Initialize( Room a, Room b) { room1 = a; room2 = b; } public Object clone() throws CloneNotSupportedException { // modify this method for deep copy // no need to implement this method for shallow copy return super.clone(); } Room room1; Room room2; }
VisualWorks Smalltalk
Object>>shallowCopy
Object>>copy ^self shallowCopy postCopy “Template method for copy”
Smalltalk.CS635 defineClass: #Door superclass: #{Core.Object} indexedType: #none private: false instanceVariableNames: 'room1 room2 '
postCopy room1 := room1 copy. room2 := room2 copy.
Consequences
Sharable & Flyweight
Nation Example
Each country, like India or China, has a lot of information
A Nation object for one country may have a lot of data
A program may only have a few references to an India object
Having all references share the same object
Symbol & Interned Strings
Smalltalk
Only one instance a symbol with a give character sequence in an image
| a b | a := #cat. b := (‘ca’ , ‘t’) asSymbol. a = b “True” a == b “True – a & b point to same location”
Symbols
Text Example
Intrinsic State
Structure
Applicability
The pattern can be used when all the following are true
MyClass* objectPtrA; MyClass* objectPtrB; if ( objectPtrA == objectPtrB ) //testing object identity
Implementation
Separating state from the flyweight
This is the hard part
Must remove the extrinsic state from the object
Store the extrinsic state elsewhere
Façade
Compiler Example
The VisualWorks Smalltalk compiler system has 75 classes
Programmers only use Compiler, which uses the other classes
Compiler evaluate: '100 factorial'
| method compiler | method := 'reset "Resets the counter to zero" count := 0.'.
compiler := Compiler new. compiler parse:method in: Counter notifying: nil
Distributed Object Systems
Subsystems
Subsystems are groups of classes, or groups of classes and other subsystems, that collaborate among themselves to support a set of contracts
There is no conceptual difference between the responsibilities of a class and a subsystem of classes
The difference between a class and subsystem of classes is a matter of scale
A subsystem should be a good abstraction
There should be as little communication between different subsystems as possible
The Facade Pattern - Basic Idea
Create a class that is the interface to the subsystem
Clients interface with the Facade class to deal with the subsystem
Consequences of Facade Pattern
It hides the implementation of the subsystem from clients
It promotes weak coupling between the subsystems and its clients
It does not prevent clients from using subsystem classes directly, should it?
Facade does not add new functionality to the subsystem
Copyright ©, All rights reserved.
2002 SDSU & Roger Whitney, 5500 Campanile Drive, San Diego, CA 92182-7700 USA.
OpenContent license defines the copyright on this document.
Previous    visitors since 30-Apr-02    Next