47
Tecniche di Progettazione: Design Patterns GoF: Proxy Design patterns, Laura Semini, Università di Pisa, Dipartimento di Informatica. 1

Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Tecniche di Progettazione:

Design Patterns

GoF: Proxy

Design patterns, Laura Semini, Università di Pisa, Dipartimento di Informatica.1

Page 2: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Revisit the Gumball machine example

� The same example covered in the State pattern

� Now we want to add some monitor to a collection of Gumball machines

Page 3: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Gumball Class

Page 4: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Gumball Monitor

Page 5: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Role of the remote Proxy

Page 6: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

RMI Detour in looking at Proxy Pattern

Page 7: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Remote Methods

Page 8: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

How the method call happens

Client calls method

Page 9: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Client Helper forwards to service helper

Page 10: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Service helper calls the real object

Page 11: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Real object returns result

Page 12: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Service helper forwards result to client

helper

Page 13: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Client helper returns result to client

Page 14: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for
Page 15: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Steps in using Java RMI

Page 16: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Additional steps

Page 17: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

STEP 1

Remote Interface

Page 18: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

STEP 1

Remote Interface

Page 19: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

STEP 2

Remote Implementation

Page 20: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

STEP 2

Remote Implementation

Page 21: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

STEP 3

Create Stubs &

Skeletons

Page 22: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for
Page 23: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for
Page 24: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for
Page 25: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Client talks to the stub

Page 26: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Hooking up client and server objects

Page 27: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for
Page 28: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for
Page 29: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Back to Gumball machine problem

Page 30: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Gumball Machine remote interface

� import java.rmi.*;

� public interface GumballMachineRemote extends Remote {

� public int getCount() throws RemoteException;� public int getCount() throws RemoteException;

� public String getLocation() throws RemoteException;

� public State getState() throws RemoteException;

� }

Page 31: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

State interface extends Serializable

� import java.io.*;

� public interface State extends Serializable {

� public void insertQuarter();

� public void ejectQuarter();� public void ejectQuarter();

� public void turnCrank();

� public void dispense();

� }

Page 32: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Use of keyword “transient”

public class NoQuarterState implements State {

transient GumballMachine gumballMachine;

public NoQuarterState(GumballMachine gumballMachine) {

this.gumballMachine = gumballMachine;

}

public void insertQuarter() {

System.out.println("You inserted a quarter");

gumballMachine.setState(gumballMachine.getHasQuarterState());

}

// other methods

} The use of transient to ensure that the serialization does not involve this object as well.

Page 33: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Proxy Pattern defined

The Proxy Pattern provides a surrogate or placeholder for another object to control access to it.

The proxy pattern is used to create a The proxy pattern is used to create a representative object that controls access to another object, which may be remote, expensive to create or in need of securing.

Page 34: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Proxy Class Diagram

Page 35: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for
Page 36: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Making the call

Page 37: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for
Page 38: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Remote Proxy

Page 39: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Virtual Proxy

Page 40: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Playing CD Covers

Page 41: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Playing CD Cover Proxy

Page 42: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

ImageProxy process

Page 43: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

ImageProxy process

Page 44: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for
Page 45: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

class ImageProxy implements Icon {

ImageIcon imageIcon;

URL imageURL;

Thread retrievalThread;

boolean retrieving = false;

public ImageProxy(URL url) { imageURL = url; }

public int getIconWidth() {

if (imageIcon != null) return imageIcon.getIconWidth();

else return 800; }

public int getIconHeight() {

if (imageIcon != null)return imageIcon.getIconHeight();

else return 600;}

public void paintIcon(final Component c, Graphics g, int x, int y) {

if (imageIcon != null) imageIcon.paintIcon(c, g, x, y);if (imageIcon != null) imageIcon.paintIcon(c, g, x, y);

else{ g.drawString("Loading CD cover, please wait...", x+300, y+190);

if (!retrieving) {

retrieving = true;

retrievalThread = new Thread(new Runnable() {

public void run() {

try {

imageIcon = new ImageIcon(imageURL, "CD Cover");

c.repaint();

} catch (Exception e) { e.printStackTrace();}

}

});

retrievalThread.start();

}

}

}

}

Design patterns, Laura Semini, Università di Pisa, Dipartimento di Informatica.45

Page 46: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

Using Java API’s Proxy to create a

protection proxy

<<interface>>Subject

request()

<<interface>>InvocationHandler

invoke()

RealSubject

request()

Proxy

request()

InvocationHandler

invoke()

Page 47: Tecniche di Progettazione: Design Patternsdidawiki.cli.di.unipi.it/lib/exe/fetch.php/magistr... · Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for

The proxy zoo

� Firewall proxy

� Smart Reference proxy

� E.g. counts the number of references

� Caching proxy

� Synchronization Proxy� Synchronization Proxy

� Complexity hiding Proxy

� Similar to façade pattern, it also controls accesses

� Copy-on-write Proxy

Design patterns, Laura Semini, Università di Pisa, Dipartimento di Informatica.47