public class LedTV { private String size; private String price; private boolean usbSupport; public LedTV( String size, String price, boolean usbSupport ) { super(); this.size = size; this.price = price; this.usbSupport = usbSupport; } public String getSize(){ return size; } public void setSize( String size ){ this.size = size; } public String getPrice(){ return price; } public void setPrice( String price ){ this.price = price; } public boolean isUsbSupport(){ return usbSupport; } public void setUsbSupport( boolean usbSupport ){ this.usbSupport = usbSupport; } @Override public String toString(){ return "LedTV [size=" + size + ", price=" + price + ", usbSupport=" + usbSupport + "]"; } }We create a class for our Memento object. The Memento class is used to store the state of the object.
public class Memento { private LedTV ledTV; public Memento( LedTV ledTV ) { super(); this.ledTV = ledTV; } public LedTV getLedTV(){ return ledTV; } public void setLedTV( LedTV ledTV ) { this.ledTV = ledTV; } @Override public String toString() { return "Memento [ledTV=" + ledTV + "]"; } }The Caretaker is the 'storeroom' and it will maintain the memento object.
import java.util.ArrayList; import java.util.List; public class Caretaker { private List<Memento> ledTvList = new ArrayList<Memento>(); public void addMemento( Memento m ) { ledTvList.add(m); System.out.println("LED TV's snapshots Maintained by CareTaker :" + ledTvList); } public Memento getMemento( int index ) { return ledTvList.get(index); } }The Originator is a hub that contains the ledTV. The Originator can invoke the createMemento to create a new Memento object The setMemento can be use to initlize the Memento.
public class Originator { LedTV ledTV; public LedTV getLedTV(){ return ledTV; } public void setLedTV( LedTV ledTV ){ this.ledTV = ledTV; } public Memento createMemento(){ return new Memento(ledTV); } public void setMemento( Memento memento ){ ledTV = memento.getLedTV(); } @Override public String toString() { return "Originator [ledTV=" + ledTV + "]"; } }We put this altogether in the main method we find it in the MementoClient. This method is used to demo to Memento design pattern.
public class MementoClient { public static void main( String[] args ) { Originator originator = new Originator(); originator.setLedTV(new LedTV("42 inch", "60000Rs", false)); Caretaker caretaker = new Caretaker(); caretaker.addMemento(originator.createMemento()); originator.setLedTV(new LedTV("46 inch", "80000Rs", true)); caretaker.addMemento(originator.createMemento()); originator.setLedTV(new LedTV("50 inch", "100000Rs", true)); System.out.println("\nOrignator current state : " + originator); System.out.println("\nOriginator restoring to 42 inch LED TV..."); originator.setMemento(caretaker.getMemento(0)); System.out.println("\nOrignator current state : " + originator); } }Let's compile and run we should get...
LED TV's snapshots Maintained by CareTaker :[Memento [ledTV=LedTV [size=42 inch, price=60000Rs, usbSupport=false]]] LED TV's snapshots Maintained by CareTaker :[Memento [ledTV=LedTV [size=42 inch, price=60000Rs, usbSupport=false]], Memento [ledTV=LedTV [size=46 inch, price=80000Rs, usbSupport=true]]] Orignator current state : Originator [ledTV=LedTV [size=50 inch, price=100000Rs, usbSupport=true]] Originator restoring to 42 inch LED TV... Orignator current state : Originator [ledTV=LedTV [size=42 inch, price=60000Rs, usbSupport=false]]The Ray Code is AWESOME!!!
Find Ray on:
wikipedia
youtube
The Ray Code
Ray Andrade