carfield.com.hk BubbleSort.java 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.strategy.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 the bubblesort sorting strategy for int arrays. * * @author Jan Hannemann * @author Gregor Kiczales * @version 1.0, 05/13/02 * */ public class BubbleSort { /** * Helper method that exchanges two values in an int array * * @param numbers the int array * @param pos1 the position of the first element * @param pos2 the position of the second element */ private void exchange(int[] numbers, int pos1, int pos2) { int tmp = numbers[pos1]; numbers[pos1] = numbers[pos2]; numbers[pos2] = tmp; } /** * Sorts an int array * * @param numbers the int array to sort */ public void sort(int[] numbers) { System.out.println(&quot;Sorting by BubbleSort...&quot;); for (int end = numbers.length; end &gt; 1; end --) { for (int current = 0; current &lt; end - 1; current ++) { if (numbers[current] &gt; numbers[current+1]) { exchange(numbers, current, current+1); } } } } } </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 LinearSort.java 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.strategy.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 the linear sort sorting strategy for int arrays. * * @author Jan Hannemann * @author Gregor Kiczales * @version 1.0, 05/13/02 * */ public class LinearSort { /** * Helper method that exchanges two values in an int array * * @param numbers the int array * @param pos1 the position of the first element * @param pos2 the position of the second element */ private void exchange(int[] numbers, int pos1, int pos2) { int tmp = numbers[pos1]; numbers[pos1] = numbers[pos2]; numbers[pos2] = tmp; } /** * Sorts an int array * * @param numbers the int array to sort */ public void sort(int[] numbers) { System.out.println(&quot;Sorting by LinearSort...&quot;); int lowest = 0; for (int start = 0; start &lt; numbers.length; start ++) { lowest = start; for (int current = start; current &lt; numbers.length; current ++) { if (numbers[current] &lt; numbers[lowest]) { lowest = current; } } exchange(numbers, start, lowest); } } }</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.strategy.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 the driver for the strategy design pattern example.&lt;p&gt; * * Intent: &lt;i&gt;Define a family of algorithms, encapsulate each one, and make * them interchangeable. Strategy lets the algorithm vary independently from * clients that use it.&lt;/i&gt;&lt;p&gt; * * Participatng objects are &lt;code&gt;LinearSort&lt;/code&gt; and &lt;i&gt;BubbleSort&lt;/i&gt; * as &lt;i&gt;Strategies&lt;/i&gt;, and &lt;code&gt;Sorter&lt;/code&gt; as &lt;i&gt;Context&lt;/i&gt;. * * In this example, an array of 10 numbers is to be sorted. Depending on the * number of arguments of the call to &lt;code&gt;Main&lt;/code&gt;, linear sort or * bubblesort are used as sorting algorithms. The interface for the strategies * is defined in &lt;code&gt;SortingStrategy&lt;/code&gt;. * * &lt;p&gt;&lt;i&gt;This is the AspectJ version.&lt;/i&gt;&lt;p&gt; * * @author Jan Hannemann * @author Gregor Kiczales * @version 1.0, 05/13/02 * * @see LinearSort * @see BubbleSort */ public class Main { /** * Returns the content of the int array in a string * * @param numbers the int array to display * @returns a string with all the ints from the array */ private static String show(int[] numbers) { String out = &quot;&quot;; for (int i=0; i&lt;numbers.length; i++) { out += (numbers[i] + &quot; &quot;); } return out; } /** * Implements the driver for the strategy example. If called with more * than zero arguments, bubblesort is used to sort the array of ten * numbers; otherwise linear sort. */ public static void main(String[] args) { int[] numbers = {3, 2, 6, 8, 1, 5, 6, 4, 7, 0}; LinearSort sort1 = new LinearSort(); BubbleSort sort2 = new BubbleSort(); Sorter sorter = new Sorter(); if (args.length == 0) { SortingStrategy.aspectOf().setConcreteStrategy(sorter, sort1); } else { SortingStrategy.aspectOf().setConcreteStrategy(sorter, sort2); } System.out.println(&quot;\nPreparing sort...&quot;); System.out.println(&quot;original: &quot;+show(numbers)); numbers = sorter.sort(numbers); System.out.println(&quot;sorted: &quot;+show(numbers)); } } </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 Sorter.java 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.strategy.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): */ /** * Sorts an int array with a provided sorting strategy. * * @author Jan Hannemann * @author Gregor Kiczales * @version 1.0, 05/13/02 * * @see LinearSort * @see BubbleSort */ public class Sorter { private int[] _numbers; void setData(int[] numbers) { _numbers = numbers; } public int[] sort(int[] numbers) { return numbers; } }</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 SortingStrategy.java 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.strategy.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.StrategyProtocol; /** * Implements the the abstract strategy design pattern protocol&lt;p&gt; * * Intent: &lt;i&gt;Define a family of algorithms, encapsulate each one, and make * them interchangeable. Strategy lets the algorithm vary independently from * clients that use it.&lt;/i&gt;&lt;p&gt; * * Participatng objects are &lt;code&gt;LinearSort&lt;/code&gt; and &lt;i&gt;BubbleSort&lt;/i&gt; * as &lt;i&gt;Strategies&lt;/i&gt;, and &lt;code&gt;Sorter&lt;/code&gt; as &lt;i&gt;Context&lt;/i&gt;. * * In this example, an array of 10 numbers is to be sorted. Depending on the * number of arguments of the call to &lt;code&gt;Main&lt;/code&gt;, linear sort or * bubblesort are used as sorting algorithms. * * &lt;p&gt;&lt;i&gt;This is the AspectJ version.&lt;/i&gt;&lt;p&gt; * * @author Jan Hannemann * @author Gregor Kiczales * @version 1.0, 05/13/02 * * @see LinearSort * @see BubbleSort */ public aspect SortingStrategy extends StrategyProtocol { /** * Assignes the &lt;i&gt;Context&lt;/i&gt; role to Sorter */ declare parents: Sorter implements Context; /** * Assignes the &lt;i&gt;Strategy&lt;/i&gt; role to LinearSort */ declare parents: LinearSort implements Strategy; /** * Assignes the &lt;i&gt;Strategy&lt;/i&gt; role to BubbleSort */ declare parents: BubbleSort implements Strategy; /** * Invokes the appropriate strategy's sort() method when the * Sorter needs to sort. */ int[] around(Sorter s, int[] numbers): call(int[] Sorter.sort(int[])) &amp;&amp; target(s) &amp;&amp; args(numbers) { Strategy strategy = getConcreteStrategy(s); if (strategy instanceof BubbleSort) ((BubbleSort)strategy).sort(numbers); else if (strategy instanceof LinearSort) ((LinearSort) strategy).sort(numbers); return numbers; } } </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