carfield.com.hkAnotherString.java2004-03-24T16:00:00Z2004-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 "License"); 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 "AS IS" 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 <i>Prototype</i> 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 "AnotherString: " + text;
}
/**
* Returns a copy of this object. Does only work this way if the
* superclass implements <code>clone()</code>.
*/
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:00ZMain.java2004-03-24T16:00:00Z2004-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 "License"); 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 "AS IS" 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.<p>
*
* Intent: <i>Specify the kinds of objects to create using a prototypical
* instance, and create new objects by copying this prototype.</i><p>
*
* Participatng objects are <code>MyString</code> and
* <code>AnotherString</code> as <i>Prototype</i>s.<p>
*
* 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.
*
* <p><i>This is the Java version.</i><p>
*
* Java's <code>Cloneable</code> 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.<p>
*
* 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("Testing the Prototype design pattern implementation...");
MyString orig1;
AnotherString orig2;
MyString copy1, copy3;
AnotherString copy2;
orig1 = new MyString(" This is Prototype 1");
orig2 = new AnotherString(" This is Prototype 2");
System.out.println("These are the two prototypes:");
System.out.println(orig1);
System.out.println(orig2);
copy1 = (MyString) orig1.clone();
copy2 = (AnotherString) orig2.clone();
System.out.println("These are copies of the prototypes:");
System.out.println(copy1);
System.out.println(copy2);
orig1.setText(" This is Prototype 3");
System.out.println("Now prototype 1 was changed. Here are p1 and its former copy:");
System.out.println(orig1);
System.out.println(copy1);
copy3 = (MyString) orig1.clone();
copy2.setText(" This is Clone 2");
System.out.println("This is a clone of the changed p1 and a changed copy2:");
System.out.println(copy3);
System.out.println(copy2);
System.out.println("... done.");
} catch (CloneNotSupportedException ex) {
System.err.println("Failure! "+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:00ZMyString.java2004-03-24T16:00:00Z2004-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 "License"); 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 "AS IS" 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 <i>Prototype</i> 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 "MyString: "+ text;
}
/**
* Returns a copy of this object. Does only work this way if the
* superclass implements <code>clone()</code>.
*/
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:00ZStringPrototypes.java2004-03-24T16:00:00Z2004-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 "License"); 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 "AS IS" 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
* <code>clone()</code> method on all <i>Prototype</i> participants and
* provides a static <code>cloneObject(Prototype)</clone> method. The default
* implementation of that method is to try to use the <code>clone()</code>
* method and, failing that, to call its protected <code>
* createCloneFor(Prototype)</code> 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 <code>Prototype</code> role to </code>MyString</code>
*/
declare parents: MyString implements Prototype;
/**
* Assigns the <code>Prototype</code> role to </code>AnotherString</code>
*/
declare parents: AnotherString implements Prototype;
/**
* Provides an alternative method for cases when the default
* <code>clone()</code> method fails: Clones objects "by hand".
*
* @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:00Zfiles.lst2004-03-24T16:00:00Z2004-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