Шаблон Strategy Java

Необходимо определить семейство алгоритмов, инкапсулировать каждый из них и сделать их взаимозаменяемыми. Стратегия позволяет изменять алгоритмы независимо от клиентов, которые ими пользуются.

clip_image002

Рис. 5.12. Пример реализации шаблона Strategy

Класс Operation объявляет общий для всех поддерживаемых алгоритмов интерфейс, которым пользуется класс Sorting для вызова конкретного алгоритма, определенного в классе SortByMax или SortByMin. Класс Sorting конфигурируется объектом класса SortByXxx, объявляет ссылку на объект класса Operation и может определять интерфейс, позволяющий объекту Operation получить доступ к информации, в данном случае для сортировки массива.

Использование шаблона позволяет отказаться от условных операторов при выборе нужного поведения. Стратегии могут предлагать различные реализации од­ного и того же поведения. Класс-клиент вправе выбирать подходящую стратегию в зависимости от своих требований.

/*пример # 31 : общий интерфейс и классы конкретных стратегий :

Operation.java : SortByMax.java : SortByMin.java */

package chapt05.strategy;

public abstract class Operation {

public abstract void sort(int mass[]);

}

package chapt05.strategy;

public class SortByMax extends Operation {

public void sort(int mass[]) {

for (int i = 0; i < mass.length; ++i) { for (int j = i; j < mass.length; ++j) {

if (mass[j] > mass[i]){

int m = mass[i];

mass[i] = mass[j];

mass[j] = m;

}

}

}

System.out.print("SortByMax : ");

for (int i : mass)

System.out.print(i + " ");

System.out.println(‘\n’); }

}

package chapt05.strategy;

public class SortByMin extends Operation {

public void sort(int mass[]) {

for (int i = 0; i < mass.length; ++i) { for (int j = i; j < mass.length; ++j) {

if (mass[j] < mass[i]){

int m = mass[i];

mass[i] = mass[j];

mass[j] = m;

}

}

}

System.out.print("SortByMin : ");

for (int i : mass)

System.out.print(i + " ");

System.out.println(‘\n’);}

}

/*пример # 32 : класс выбора стратегии : Sorting.java */

package chapt05.strategy;

public class Sorting {

private Operation operation = null;

public Sorting(int operation){

switch(operation) {

case 1: this.operation = new SortByMax();

break;

case 2: this.operation = new SortByMin();

break;

default: System.out.println(

"Такая операция отсутствует"); }

}

public void sorting(int[] mass) {

if (operation != null) operation.sort(mass);

else return;

}

}

/*пример # 33 : использование шаблона Strategy: Main.java */

package chapt05.strategy;

public class Main {

public static void main(String args[]) {

int mass[] = {28, 9, 71, 8, 35, 5, 51};

Sorting cont1 = new Sorting(1);

Sorting cont2 = new Sorting(2);

cont1.sorting(mass);

cont2.sorting(mass);

}

}

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100