carfield.com.hkBubbleSort.java2004-03-24T16:00:00Z2004-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 "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.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("Sorting by BubbleSort...");
for (int end = numbers.length; end > 1; end --) {
for (int current = 0; current < end - 1; current ++) {
if (numbers[current] > 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:00ZLinearSort.java2004-03-24T16:00:00Z2004-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 "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.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("Sorting by LinearSort...");
int lowest = 0;
for (int start = 0; start < numbers.length; start ++) {
lowest = start;
for (int current = start; current < numbers.length; current ++) {
if (numbers[current] < 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:00ZMain.java2004-03-24T16:00:00Z2004-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 "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.patterns.
*
* Contributor(s):
*/
/**
* Implements the driver for the strategy design pattern example.<p>
*
* Intent: <i>Define a family of algorithms, encapsulate each one, and make
* them interchangeable. Strategy lets the algorithm vary independently from
* clients that use it.</i><p>
*
* Participatng objects are <code>LinearSort</code> and <i>BubbleSort</i>
* as <i>Strategies</i>, and <code>Sorter</code> as <i>Context</i>.
*
* In this example, an array of 10 numbers is to be sorted. Depending on the
* number of arguments of the call to <code>Main</code>, linear sort or
* bubblesort are used as sorting algorithms. The interface for the strategies
* is defined in <code>SortingStrategy</code>.
*
* <p><i>This is the AspectJ version.</i><p>
*
* @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 = "";
for (int i=0; i<numbers.length; i++) {
out += (numbers[i] + " ");
}
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("\nPreparing sort...");
System.out.println("original: "+show(numbers));
numbers = sorter.sort(numbers);
System.out.println("sorted: "+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:00ZSorter.java2004-03-24T16:00:00Z2004-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 "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.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:00ZSortingStrategy.java2004-03-24T16:00:00Z2004-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 "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.patterns.
*
* Contributor(s):
*/
import ca.ubc.cs.spl.pattern.library.StrategyProtocol;
/**
* Implements the the abstract strategy design pattern protocol<p>
*
* Intent: <i>Define a family of algorithms, encapsulate each one, and make
* them interchangeable. Strategy lets the algorithm vary independently from
* clients that use it.</i><p>
*
* Participatng objects are <code>LinearSort</code> and <i>BubbleSort</i>
* as <i>Strategies</i>, and <code>Sorter</code> as <i>Context</i>.
*
* In this example, an array of 10 numbers is to be sorted. Depending on the
* number of arguments of the call to <code>Main</code>, linear sort or
* bubblesort are used as sorting algorithms.
*
* <p><i>This is the AspectJ version.</i><p>
*
* @author Jan Hannemann
* @author Gregor Kiczales
* @version 1.0, 05/13/02
*
* @see LinearSort
* @see BubbleSort
*/
public aspect SortingStrategy extends StrategyProtocol {
/**
* Assignes the <i>Context</i> role to Sorter
*/
declare parents: Sorter implements Context;
/**
* Assignes the <i>Strategy</i> role to LinearSort
*/
declare parents: LinearSort implements Strategy;
/**
* Assignes the <i>Strategy</i> 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[])) && target(s) && 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: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