carfield.com.hk Main.java 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.memento.java; /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * This file is part of the design patterns project at UBC * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the &quot;License&quot;); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/. * * Software distributed under the License is distributed on an &quot;AS IS&quot; basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is ca.ubc.cs.spl.patterns. * * Contributor(s): */ /** * Implements the driver for the memento design pattern example.&lt;p&gt; * * Intent: &lt;i&gt;Without violating encapsulation, capture and externalize an * object's internal state so that the object can be restored to this state * later&lt;/i&gt;&lt;p&gt; * * Participatng objects are &lt;code&gt;Memento&lt;/code&gt; and &lt;code&gt;Originator&lt;/code&gt; * &lt;p&gt; * * This example changes the state of the &lt;i&gt;Originator&lt;/i&gt; five times, but * creates a &lt;i&gt;Memento&lt;/i&gt; of it after the third change. After the 5 changes * are done, the &lt;i&gt;Memento&lt;/i&gt; is used to restore the &lt;i&gt;Originator&lt;/i&gt;'s * state. * * &lt;p&gt;&lt;i&gt;This is the Java version.&lt;/i&gt;&lt;p&gt; * * Memento and Originator are tightly coupled. * * @author Jan Hannemann * @author Gregor Kiczales * @version 1.0, 07/13/02 * * @see Memento * @see Originator */ public class Main { /** * This example changes the state of the &lt;i&gt;Originator&lt;/i&gt; five times, but * creates a &lt;i&gt;Memento&lt;/i&gt; of it after the third change. After the 5 changes * are done, the &lt;i&gt;Memento&lt;/i&gt; is used to restore the &lt;i&gt;Originator&lt;/i&gt;'s * state. */ public static void main(String[] args) { Memento storedState = null; Originator counter = new Originator(); for (int i=1; i&lt;=5; i++) { counter.increment(); counter.show(); if (i==3) { storedState = counter.createMemento(); } } System.out.println(&quot;\nTrying to reinstate state (3)...&quot;); counter.setMemento(storedState); counter.show(); } }</TEXTAREA><br><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> 2004-03-24T16:00:00Z Memento.java 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.memento.java; /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * This file is part of the design patterns project at UBC * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the &quot;License&quot;); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/. * * Software distributed under the License is distributed on an &quot;AS IS&quot; basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is ca.ubc.cs.spl.patterns. * * Contributor(s): */ /** * Implements a sample &lt;i&gt;Memento&lt;/i&gt; class. This particular menento stores * the counter of its originator (an int value), and returns it upon request. * * @author Jan Hannemann * @author Gregor Kiczales * @version 1.0, 07/13/02 * * @see Originator */ public class Memento { /** * stores the originator's state */ private int state; /** * Captures the originator's state and stores it * * @param newState the state to store */ public void setState(int newState) { state = newState; } /** * Returns the stored originator state * * @returns the stored state */ public int getState() { return state; } /** * Creates a memento object specifically designed for this example * * @param init the initial state to store */ public Memento(int init) { state = init; } }</TEXTAREA><br><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> 2004-03-24T16:00:00Z MyOriginator.java 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.memento.aspectj; /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * This file is part of the design patterns project at UBC * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the &quot;License&quot;); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/. * * Software distributed under the License is distributed on an &quot;AS IS&quot; basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is ca.ubc.cs.spl.patterns. * * Contributor(s): */ /** * Implements a sample &lt;i&gt;Originator&lt;/i&gt; class. Objects of this particular * originator have stat: an int representing the number of time the &lt;code&gt; * increment()&lt;/code&gt; method was called. &lt;p&gt; * * The originator does not know about its role in the pattern. * * @author Jan Hannemann * @author Gregor Kiczales * @version 1.0, 07/13/02 * * @see StateMemento */ public class MyOriginator { /** * the number of times &lt;code&gt;increment()&lt;/code&gt; was called on this object */ protected int currentValue = 0; /** * increments the counter (this originator's state) by one */ public void increment() { currentValue++; } /** * Displays a the state of this originator */ public void show() { System.out.println(&quot;Originator value is &quot; + currentValue); } }</TEXTAREA><br><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> 2004-03-24T16:00:00Z Originator.java 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.memento.java; /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * This file is part of the design patterns project at UBC * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the &quot;License&quot;); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/. * * Software distributed under the License is distributed on an &quot;AS IS&quot; basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is ca.ubc.cs.spl.patterns. * * Contributor(s): */ /** * Implements a sample &lt;i&gt;Originator&lt;/i&gt; class. Objects of this particular * originator have stat: an int representing the number of time the &lt;code&gt; * increment()&lt;/code&gt; method was called. * * @author Jan Hannemann * @author Gregor Kiczales * @version 1.0, 07/13/02 * * @see Memento */ public class Originator { /** * the number of times &lt;code&gt;increment()&lt;/code&gt; was called on this object */ protected int currentValue = 0; /** * increments the counter (this originator's state) by one */ public void increment() { currentValue++; } /** * Displays a the state of this originator */ public void show() { System.out.println(&quot;Originator value is &quot; + currentValue); } /** * Creates a memento from this originator, storing the current state */ public Memento createMemento() { return new Memento(currentValue); } /** * Restores this originator to former state stored by the memento passed * * @param m the memento that stores the prior state */ public void setMemento(Memento m) { currentValue = m.getState(); } }</TEXTAREA><br><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> 2004-03-24T16:00:00Z StateMemento.java 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.memento.aspectj; /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * This file is part of the design patterns project at UBC * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the &quot;License&quot;); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/. * * Software distributed under the License is distributed on an &quot;AS IS&quot; basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is ca.ubc.cs.spl.patterns. * * Contributor(s): */ import ca.ubc.cs.spl.pattern.library.Memento; import ca.ubc.cs.spl.pattern.library.MementoException; import ca.ubc.cs.spl.pattern.library.MementoProtocol; /** * Implements an instance of the memento design pattern. * * @author Jan Hannemann * @author Gregor Kiczales * @version 1.0, 07/13/02 * * @see MyOriginator */ public aspect StateMemento extends MementoProtocol { /** * Assigns the &lt;i&gt;Originator&lt;/i&gt; role to &lt;code&gt;MyOriginator&lt;/code&gt; */ declare parents: MyOriginator implements Originator; /** * Creates a &lt;i&gt;Memento&lt;/i&gt; object for an &lt;i&gt;Originator&lt;/i&gt;. An anonymous * class is used to realize the Memento * * @param o the originator to create a memento for * @returns the memento storing the originator's state */ public Memento createMementoFor(Originator o) { if (o instanceof MyOriginator) { Memento m = new Memento() { private Integer state; public void setState(Object state) { this.state = (Integer) state; } public Object getState() { return state; } }; m.setState(new Integer(((MyOriginator)o).currentValue)); return m; } else { throw new MementoException(&quot;Invalid originator&quot;); } } /** * Restores this originator to former state using the memento passed * * @param o the originator to restore * @param m the memento that stores the prior state */ public void setMemento(Originator o, Memento m) { if (o instanceof MyOriginator) { Integer integer = (Integer) m.getState(); ((MyOriginator)o).currentValue = integer.intValue(); } else { throw new MementoException(&quot;Invalid originator&quot;); } } }</TEXTAREA><br><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> 2004-03-24T16:00:00Z files.lst 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> 2004-03-24T16:00:00Z