carfield.com.hk AnotherString.java 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.prototype.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.pattern. * * Contributor(s): */ /** * Implements a sample &lt;i&gt;Prototype&lt;/i&gt; that imitates a simple String * class. * * @author Jan Hannemann * @author Gregor Kiczales * @version 1.0, 05/13/02 * * @see MyString */ public class AnotherString implements Cloneable { /** * the string that this object encapsulates */ protected String text; /** * Creates a new MyString object with the given string * * @param init the initial String for this object */ public AnotherString(String init) { text = init; } /** * Changes the string this object encapsulates * * @param newText the new text for this object. */ public void setText(String newText) { text = newText; } /** * Returns a string representation of this object. * * @returns a string representation of this object. */ public String toString() { return &quot;AnotherString: &quot; + text; } /** * Returns a copy of this object. Does only work this way if the * superclass implements &lt;code&gt;clone()&lt;/code&gt;. */ public Object clone() throws CloneNotSupportedException { return super.clone(); } }</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 Main.java 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.prototype.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.pattern. * * Contributor(s): */ /** * Implements the driver for the Prototype design pattern example.&lt;p&gt; * * Intent: &lt;i&gt;Specify the kinds of objects to create using a prototypical * instance, and create new objects by copying this prototype.&lt;/i&gt;&lt;p&gt; * * Participatng objects are &lt;code&gt;MyString&lt;/code&gt; and * &lt;code&gt;AnotherString&lt;/code&gt; as &lt;i&gt;Prototype&lt;/i&gt;s.&lt;p&gt; * * In this example, both MyString and AnotherString implement cloneable * classes emulating limited String behavior. This driver creates an * object of each class and clones it. Both originals and clones are * manipulated to show that they are different objects. * * &lt;p&gt;&lt;i&gt;This is the Java version.&lt;/i&gt;&lt;p&gt; * * Java's &lt;code&gt;Cloneable&lt;/code&gt; interface is used. * * @author Jan Hannemann * @author Gregor Kiczales * @version 1.0, 05/13/02 * * @see MyString * @see AnotherString */ public class Main { /** * Implements the driver for the Prototype design pattern example.&lt;p&gt; * * In this example, both MyString and AnotherString implement cloneable * classes emulating limited String behavior. This driver creates an * object of each class and clones it. Both originals and clones are * manipulated to show that they are different objects. * * @param args the command line parameters, unused. */ public static void main(String[] args) { try { System.out.println(&quot;Testing the Prototype design pattern implementation...&quot;); MyString orig1; AnotherString orig2; MyString copy1, copy3; AnotherString copy2; orig1 = new MyString(&quot; This is Prototype 1&quot;); orig2 = new AnotherString(&quot; This is Prototype 2&quot;); System.out.println(&quot;These are the two prototypes:&quot;); System.out.println(orig1); System.out.println(orig2); copy1 = (MyString) orig1.clone(); copy2 = (AnotherString) orig2.clone(); System.out.println(&quot;These are copies of the prototypes:&quot;); System.out.println(copy1); System.out.println(copy2); orig1.setText(&quot; This is Prototype 3&quot;); System.out.println(&quot;Now prototype 1 was changed. Here are p1 and its former copy:&quot;); System.out.println(orig1); System.out.println(copy1); copy3 = (MyString) orig1.clone(); copy2.setText(&quot; This is Clone 2&quot;); System.out.println(&quot;This is a clone of the changed p1 and a changed copy2:&quot;); System.out.println(copy3); System.out.println(copy2); System.out.println(&quot;... done.&quot;); } catch (CloneNotSupportedException ex) { System.err.println(&quot;Failure! &quot;+ex); } } }</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 MyString.java 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.prototype.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.pattern. * * Contributor(s): */ /** * Implements a sample &lt;i&gt;Prototype&lt;/i&gt; that imitates a simple String * class. * * @author Jan Hannemann * @author Gregor Kiczales * @version 1.0, 05/13/02 * * @see AnotherString */ public class MyString implements Cloneable { /** * the string that this object encapsulates */ protected String text; /** * Creates a new MyString object with the given string * * @param init the initial String for this object */ public MyString(String init) { text = init; } /** * Changes the string this object encapsulates * * @param newText the new text for this object. */ public void setText(String newText) { text = newText; } /** * Returns a string representation of this object. * * @returns a string representation of this object. */ public String toString() { return &quot;MyString: &quot;+ text; } /** * Returns a copy of this object. Does only work this way if the * superclass implements &lt;code&gt;clone()&lt;/code&gt;. */ public Object clone() throws CloneNotSupportedException { return super.clone(); } } </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 StringPrototypes.java 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.prototype.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.pattern. * * Contributor(s): */ import ca.ubc.cs.spl.pattern.library.PrototypeProtocol; /** * Implements the abstract Prototype design pattern. It attaches a default * &lt;code&gt;clone()&lt;/code&gt; method on all &lt;i&gt;Prototype&lt;/i&gt; participants and * provides a static &lt;code&gt;cloneObject(Prototype)&lt;/clone&gt; method. The default * implementation of that method is to try to use the &lt;code&gt;clone()&lt;/code&gt; * method and, failing that, to call its protected &lt;code&gt; * createCloneFor(Prototype)&lt;/code&gt; method. Concrete subaspects can either * overwrite none or one (or both) of the methods to create individual * results * * @author Jan Hannemann * @author Gregor Kiczales * @version 1.0, 05/13/02 */ public aspect StringPrototypes extends PrototypeProtocol { /** * Assigns the &lt;code&gt;Prototype&lt;/code&gt; role to &lt;/code&gt;MyString&lt;/code&gt; */ declare parents: MyString implements Prototype; /** * Assigns the &lt;code&gt;Prototype&lt;/code&gt; role to &lt;/code&gt;AnotherString&lt;/code&gt; */ declare parents: AnotherString implements Prototype; /** * Provides an alternative method for cases when the default * &lt;code&gt;clone()&lt;/code&gt; method fails: Clones objects &quot;by hand&quot;. * * @param object the prototype object to clone * @returns a copy of the object */ protected Object createCloneFor(Prototype object) { if (object instanceof AnotherString) { return new AnotherString( ((AnotherString) object).toString()); } else { return null; } } }</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