1 / 19

The Proxy Design Pattern

The Proxy Design Pattern. Problem: Defer the cost of object creation and init. until actually used Applicability (possible contexts): Virtual Proxy : Create an expensive object on demand (lazy construction) Cache Proxy (PLoPD 2): Hold results temporarily

rparsley
Télécharger la présentation

The Proxy Design Pattern

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. The Proxy Design Pattern • Problem: Defer the cost of object creation and init. until actually used • Applicability (possible contexts): • Virtual Proxy: Create an expensive object on demand (lazy construction) • Cache Proxy (PLoPD 2): Hold results temporarily • Remote Proxy: Use a local representative for a remote object (different address space) • Protection Proxy: Control access to shared object

  2. Intent and Motivation • Intent • Provide a surrogate of placeholder for another object to control access to it. • Motivation • Deferring object creation – lazy evaluation, on demand creation • Separate this from the actual object • Client treats the Proxy as if the real object was created • Proxy interprets the on-demand evaluation policy.

  3. Proxy Motivation

  4. Proxy Motivation -2

  5. Proxy Applicability • Remote proxy provides a local representation of the remote object in different address spaces • Virtual proxy creates expensive objects on demand • Protection proxy controls access to the original object, for instance when implementing access rights to objects in a separate layer • Smart reference instead of a simple pointer to count object references including • Counting references • Loading persistent objects into memory on first reference • Checking object locking on access

  6. Proxy Structure

  7. Proxy Structure - 2

  8. Proxy Participants • Proxy (ImageProxy) • Maintains a reference by which to access the real subject. • Provides an interface identical to Subject, so it can be substituted for the real subject • Controls access to the real subject and may be responsible for creating it. • Also: • For remote proxy – encoding and decoding messages (I.e., RPC) • For virtual proxy – caching the real subject • For protection proxy – check callers access rights. • Subject (Graphic) • Defines the common interface for RealSubject and Proxy so that a Proxy can be used anywhere a RealSubject can. • RealSubject (Image) • defines, the real object that the proxy represents.

  9. Proxy • Collaborations • Proxy forwards requests to RealSubject when appropriate, depending on the kind of proxy. • May perform some operations before like a mediator, or after. • Consequences • Remote proxy – hides the fact that RealSubject is remote • Virtual proxy – optimizes such as on-demand creation • Protection proxy and smart reference – allow additional housekeeping chores when subject is accessed. • Copy-on-write – postpones creation of a copy of an object until it is necessary (if at all changed from the original).

  10. Paragraph Paragraph Sample Context: Word Processor Document Image

  11. Forces 1. The image is expensive to load 2. The complete image is not always necessary optimize! 2MB 2KB

  12. A Bad Solution Obviously, the document should not be aware to the optimization, nor to the image contents, etc. document::draw(){ switch (glyph.type) { case image: if (cannot_optimize) load_full_image(); else optimize(glyph); break; case paragraph: . . .

  13. Applicability • Behaviour of an object depends on its state, and it must change its behaviour depending on that state. • Operations have large multipart conditional statements ...

  14. Proxy Solution (example) Solution: Provide a “surrogate” or place-holder which provides transparent access to another object Image Proxy Real Image || file_name : String real_image || get_image( ) || ImageData Draft( ) DrawDetailed( ) Document Glyph 0..n Draw( )

  15. Proxy Solution (example):Object Diagram 2: get_image ( ) 1: DrawDetailed ( ) image aDocument Proxy 3: new (fileName) 4: DrawDetailed( ) theBitmap: RealImage

  16. Proxy Solution (general form) RealSubject Proxy Request( ) realSubject Request( ) Subject client Request( )

  17. Proxy Motivation 1

  18. Proxy Motivation 2

  19. Proxy Structure Provide a surrogate or placeholder for another object to control access to it

More Related