Latest web development tutorials

Режим стратегии

В режиме стратегии (стратегия шаблон), акт класса, или алгоритм может быть изменен во время выполнения. Этот тип шаблонов проектирования относятся поведенческие модели.

В режиме стратегии, мы создаем объекты и различные поведенческие стратегии изменения как объект политики, чтобы изменить представление контекста объекта. Объект политики для изменения выполнения алгоритма объект контекста.

введение

Цель: Определение семейства алгоритмов, инкапсулирует каждый из них, и сделать их взаимозаменяемыми.

Главным образом решить: В случае множественного аналогичным алгоритмом с использованием , если ... еще принес сложным и трудно поддерживать.

Когда использовать: система имеет много, много категорий, и отличить их только их непосредственное поведение.

Как исправить: будут ли эти алгоритмы в пакет некоторый класс произвольно заменен.

Ключевой код: реализовать тот же интерфейс.

Примеры применения: 1, хорошие идеи Чжугэ Лян, каждый набор представляет собой стратегию.2, путешествия способ путешествовать, выбирать ездить на велосипеде, на машине, каждый способ передвижения является стратегией. 3, JAVA AWT в LayoutManager.

Преимущества: 1, алгоритм может свободно переключаться.2, чтобы избежать использования множественного условного. 3, хорошая масштабируемость.

Недостатки: 1, стратегия будет увеличиваться.2, все классы нуждаются воздействия внешней политики.

Сценарии использования: 1, если есть система , в которой много классов, разница между ними только в их поведении, а затем использовать шаблон стратегии может динамически выбрать , чтобы акт во многих поведении объекта.2, система должна динамически выбрать один из нескольких алгоритмов. 3. Если объект имеет много поведения, если это не правильный режим, эти действия должны были использовать несколько условий выбранного оператора для достижения.

Примечание: Если политика системы более четырех, необходимо рассмотреть вопрос об использовании смешанного режима, чтобы решить проблему классовой политики расширения.

реализация

Мы создадим хорошо определенный интерфейс и осуществления деятельности интерфейсаСтратегияСтратегияСтратегиясущности.Контекстявляется использование определенной политики класса.

StrategyPatternDemo,наши демонстрационные классы с использованиемконтекстаконтекста и политики объекты , чтобы продемонстрировать поведение , когда она используется для конфигурирования или изменения изменения политики.

шаблон стратегии UML диаграмма

Шаг 1

Создайте интерфейс.

Strategy.java

открытый интерфейс Стратегия {
   общественное INT doOperation (INT num1, INT пит2);
}

Шаг 2

Создать класс сущностей, который реализует интерфейс.

OperationAdd.java

Открытый класс OperationAdd реализует стратегию {
   @Override
   общественное INT doOperation (INT num1, Int пит2) {
      вернуть num1 + num2;
   }
}

OperationSubstract.java

Открытый класс OperationSubstract реализует стратегию {
   @Override
   общественное INT doOperation (INT num1, Int пит2) {
      вернуть num1 - num2;
   }
}

OperationMultiply.java

Открытый класс OperationMultiply реализует стратегию {
   @Override
   общественное INT doOperation (INT num1, Int пит2) {
      вернуть num1 * num2;
   }
}

Шаг 3

Создание классаконтекста.

Context.java

Открытый класс {Context
   Стратегия частной стратегии;

   общественный контекст (стратегия Стратегия) {
      this.strategy = стратегия;
   }

   общественное INT executeStrategy (INT num1, Int пит2) {
      вернуть strategy.doOperation (num1, num2);
   }
}

Шаг 4

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

StrategyPatternDemo.java

Открытый класс StrategyPatternDemo {
   государственной статической силы основных (String []) {агдз
      Контекст Контекст = новый контекст (новый OperationAdd ());		
      System.out.println ( "10 + 5 =" + context.executeStrategy (10, 5));

      Контекст = новый контекст (новый OperationSubstract ());		
      System.out.println ( "10 - 5 =" + context.executeStrategy (10, 5));

      Контекст = новый контекст (новый OperationMultiply ());		
      System.out.println ( "10 * 5 =" + context.executeStrategy (10, 5));
   }
}

Шаг 5

Проверьте выход.

10 + 5 = 15
10--5 = 5
10 * 5 = 50