Vous êtes sur la page 1sur 19

Design Pattern : tat etsous-titres du masque Memento Modifiez le style des

5/6/12

Plan
O Etat O Design Pattern : State
Principe Avantage /Inconvnient Exemple

O Design Pattern : Memento


Principe Avantage /Inconvnient Exemple
5/6/12

Design Pattern : tat


Modifiez le style des sous-titres du masque

5/6/12

tat
O Ltat dun objet est une combinaison

des valeurs courantes de ses attributs.

5/6/12

Principe
Lobjectif du pattern STATE est de distribuer la logique dpendant de ltat dun objet travers plusieurs classes qui reprsentent chacune un tat diffrent.

5/6/12

Avantages
O Facilite la maintenance O amliore l'volutivit O vite d'avoir de grosses portions de

code constitues uniquement de Switch cases

5/6/12

Inconvnient
O Multiplication des classes

5/6/12

Exemple Graphique

5/6/12

Exemple
public class StateContext { private State acceptedState; private State requestedState; private State grantedState; private State state; public StateContext() { acceptedState = new AcceptedState(); requestedState = new RequestedState(); grantedState = new GrantedState(); state = null; } public void acceptApplication() { this.state = acceptedState; } public void requestPermission() { state.requestPermission(this); } public void grantPermission() { state.grantPermission(this); } public String getStatus() { return state.getStatus(); } public void setState(State state) { this.state = state; } public State getAcceptedState() { return acceptedState; } public State getGrantedState() { return grantedState; } public State getRequestedState() { return requestedState; }} 5/6/12

public public public public }

interface State { void grantPermission(StateContext ctx); void requestPermission(StateContext ctx); String getStatus();

5/6/12

public class RequestedState implements State { public void grantPermission(StateContext ctx) { System.out.println("Granting Permission"); ctx.setState(ctx.getGrantedState()); } public void requestPermission(StateContext ctx) { System.out.println("Permission already requested"); } public String getStatus() { return "Requested permission"; }} 5/6/12

public class AcceptedState implements State { public void grantPermission(StateContext ctx) { } public void requestPermission(StateContext ctx){ System.out.println("Requesting permission"); ctx.setState(ctx.getRequestedState()); } public String getStatus() { return "Request Received"; } } 5/6/12

public class GrantedState implements State { public void grantPermission(StateContext ctx) { System.out.println("Invalid state"); } public void requestPermission(StateContext ctx) { System.out.println("Invalid state"); } public String getStatus() { return "Granted"; } } 5/6/12

public static void main(String[] args) { StateContext ctx = new StateContext(); ctx.acceptApplication(); ctx.requestPermission(); ctx.grantPermission(); System.out.println(ctx.getStatus()); } 5/6/12

Design Pattern : Memento


Modifiez le style des sous-titres du masque

5/6/12

Principe
Lobjectif du pattern MEMENTO est de permettre le stockage et la restauration de ltat dun objet.

5/6/12

Exemple graphique

5/6/12

public class Originator { private String state;

public void restoreFromMemento( Memento memento) { state = memento.getSavedSta te(); System.out.println("Ori ginator: State after restoring from Memento: " + state); }
5/6/12

public void set(String state) { System.out.println("Originator: Setting state to " + state); this.state = state; }

public Memento saveToMemento() { System.out.println("Originator: Saving to Memento."); return new Memento(state); }

package memento; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Originator.Memento> savedStates = new ArrayList<Originator.Memento>(); Originator originator = new Originator(); originator.set("State1"); originator.set("State2"); savedStates.add(originator.saveToMemento()); originator.set("State3"); // We can request multiple mementos, and choose which one to roll back to. savedStates.add(originator.saveToMemento()); originator.set("State4"); originator.restoreFromMemento(savedStates.get(1)); } }

5/6/12

Vous aimerez peut-être aussi