В этой статье описывается использование режима стратегии для Java для решения проблемы рекламных продуктов торговых центров. Поделитесь этим для вашей ссылки, следующим образом:
Определение шаблона
Режим политики: определить серию алгоритмов, инкапсулировать каждый алгоритм и может использоваться взаимозаменяемо, и режим политики позволяет алгоритму изменять независимо от приложения клиента, которое его использует.
Примеры второго режима
1 Анализ шаблона
Мы заимствуем рекламные продукты торгового центра, чтобы проиллюстрировать эту модель.
2 Статическая классная диаграмма политики
3 примеры кода
3.1 Создать интерфейс-интерфейс-интерфейс
Пакет com.demo.strategy;/** * Интерфейс политики * * @author * */public interface istrategy {/** * Метод расчета фактической цены * * @param потребление price * Сумма потребления * @return */public Double Realprice (двойное потребление Price);}3,2 20% скидка стратегии продвижения-ребатэтрейги
пакет com.demo.strategy;/** * 20% скидка стратегии продвижения продукта * * @author * */public Class Recatestrategy реализует istrategy {private final Double Speat; / *** Метод конструкции Установите ставку дисконтирования*/ public recatestrategy () {this.rate = 0,8; } / ** * Рассчитайте метод фактического цены * * @param потребление price * Сумма потребления * @return * / public double realprice (двойное потребление) {return outmanceprice * this.rate; }}3.3 Рекламная стратегия для 200 скидает для более чем 1000 юаней, REDUCESTRATEGY
пакет com.demo.strategy;/** * 200 off для покупок более 1000 стратегии продвижения продукта * * @author * */public class Reducestrategy реализует iStrategy {/** * Метод для расчета фактической цены * * @param outpriceprice * summancer uncrace * @return */public double prealprice (двойное потребление) {if (если потребительский спектр> = 1000). } else {return ourcepriceprice; }}}3,4 20% скидка на рекламную стратегию для более чем 200 юаней PromotionalStrategy
Пакет com.demo.strategy;/** * 200 или более, 20% скидка для стратегии продвижения продукта для частей выше 200 * * @author * */public class romotionaltrategy реализует Istrategy {/** * Метод для расчета фактической цены * * @param потребление Price * Summarer * @return */public Realprice (двойное потребление) {if entreprice> + @return */public Realprice (двойное потребление) {if contrageprice> + @return */public Realprice (двойное потребление) {if contrageprice> + @return */public Realprice (двойное потребление). - 200) * 0,8; } else {return ourcepriceprice; }}}3.5 Создание контекста
пакет com.demo.context; import java.math.bigdecimal; import com.demo.strategy.istrategy;/** * Контекстная среда * * @author * */public class Context {// Текущая политика частная стратегия Itrategy; // Установить текущую политику public void setStrategy (стратегия Itrategy) {this.strategy = стратегия; } // Использование стратегии для расчета цены Public Double CUL (двойное потребление price) {// Использование конкретной стратегии продвижения продукта для получения фактической суммы потребления double RealPrice = this.strategy.RealPrice (ConsumperCeprice); // Оформление 1 цифры после десятичной точки, то есть точнее к углу BIGDECIMAL BD = новый BIGDECIMAL (REALPRICE); bd = bd.setscale (1, bigdecimal.round_down); return bd.doublevalue (); }}3.6 Клиент потребительских покупок и потребления
пакет com.demo; import java.util.random;/** * Клиентское приложение * * @author * */public class client {/** * @param args */public static void main (string [] args) {// Создать экземпляр объекта Up и Down Context context = новый контекст (); // случайное число объекта random Random = new Random (); для (int i = 0; i <10; i ++) {// Как генерировать случайные числа определить, какая стратегия продвижения для использования int x = random.nextint (3); // потребительская цена также генерируется случайными числами (не может быть 0) двойное потребление price = 0; while ((ConsumerPrice = random.nextint (2000)) == 0) {} Double RealPrice = enurningPrice; Switch (x) {case 0: // 20% скидка продуктов // context.setStrategy (new Recatestrategy ()); realprice = потребление price * 0,8; перерыв; Случай 1: // 20% скидка продуктов выше 200 /// Context.setStrategy (New PromotionalStrategy ()); if (ConsumerPrice> 200) {realPrice = 200 + (ConsumerPrice - 200) * 0,8; } перерыв; Случай 2: // 200 откуда для покупок более 1000 // context.setStrategy (new Reducestrategy ()); if (ConsumerPrice> = 1000) {realPrice = потребление - 200; } перерыв; } System.out.print ("【" + (x == 0? "20% скидка для покупок более 200": (x == 1? "20% скидка для покупок свыше 1000": "")) + "】 Продукт:"); System.out.println («Оригинальная цена:» + потребление Price + » - цена после скидки:« + RealPrice); }}}4 Результаты работы
【200 скидка для покупки более 1000】 Продукт: Оригинальная цена: 908,0 - цена за скидкой: 908,0
【200 скидка для покупок более 1000】 Продукт: Оригинальная цена: 1129,0 - цена за скидкой: 929,0
【200 скидка для покупок более 1000】 Продукт: Оригинальная цена: 829,0 - цена за скидкой: 829,0
[20% скидка] Продукт: Оригинальная цена: 518,0 - Цена за скидкой: 414,40000000000003
【200 скидка для покупок свыше 1000】 Продукт: Оригинальная цена: 1230,0 - цена за скидкой: 1030.0
【Скидка 20%】 Продукт: оригинальная цена: 106,0 - цена за скидкой: 84,8000000000000001
【200 скидка для покупок более 1000】 Продукт: Оригинальная цена: 1134,0 - цена за скидкой: 934,0
[20% скидка для деталей выше 200] Продукт: Оригинальная цена: 664,0 - Цена за скидкой: 571,2
【200 скидка для покупок более 1000】 Продукт: Оригинальная цена: 564,0 - цена за скидкой: 564,0
【200 скидка для покупок более 1000】 Продукт: Оригинальная цена: 730,0 - цена за скидкой: 730,0
Три принципа дизайна этого образца
1 Принцип «открытый»
2 Принцип единой ответственности
Четыре случая использования
1 Когда производительное поведение нескольких классов различено, и необходимо динамически выбрать конкретное поведение выполнения во время выполнения.
2 Необходимо использовать различные стратегии в разных ситуациях, или стратегии могут быть реализованы другими способами в будущем.
3 Когда необходимо скрыть детали реализации конкретных стратегий, каждая конкретная стратегия не зависит друг от друга.
4 Когда в операции используются множественные поведения в классе, и в операции используются множественные условные ветви для оценки использования нескольких поведений, шаблон политики может использоваться для имплантации действий каждой условной ветви в конкретную стратегию.
Статическая классовая диаграмма с пятью стратегией
Для получения дополнительного контента, связанного с Java, читатели, заинтересованные в этом сайте, могут просмотреть темы: «Введение и расширенное учебное пособие по объектно-ориентированному программам Java», «Учебное пособие по структуре данных Java и алгоритм», «Суммарной навыки Java Dom Node», «Суммируют навыки работы навыков операции Java File File и Directory» и «Summary of Java CACEE CACEE».
Я надеюсь, что эта статья будет полезна для всех Java Programming.