大话设计模式_策略模式
本文以 商场促销 为例子来实现这种模式。
商场三种活动:
1.按照原来价格收费
2.八折收费
3.满300反100
一:工厂模式实现
二:策略模式实现
三:工厂+策略模式实现
package com.wzs.three;/** * 策略模式和工厂模式结合 * * @author Administrator * */public class StrategyAndFactory {public static void main(String[] args) {System.out.println(new CashContext(1).getResult(500));System.out.println(new CashContext(2).getResult(500));System.out.println(new CashContext(3).getResult(500));System.out.println(new CashContext(4).getResult(500));}}/* * 收费策略 */class CashContext {private CashSuper cashSuper;public CashContext(int type) {switch (type) {case 1:System.out.println("正常收费.");cashSuper = new CashNormal();break;case 2:System.out.println("八折收费.");cashSuper = new CashRebate(0.8);break;case 3:System.out.println("满300反100.");cashSuper = new CashReturn(300, 100);break;default:System.out.println("默认正常收费.");cashSuper = new CashNormal();break;}}public double getResult(double money) {return cashSuper.acceptCash(money);}}/* * 现金收取抽象类 */abstract class CashSuper {public abstract double acceptCash(double money);}/* * 正常收费 */class CashNormal extends CashSuper {@Overridepublic double acceptCash(double money) {return money;}}/* * 打折收费 */class CashRebate extends CashSuper {private double moneyRebate = 1d;// 打折率public CashRebate(double moneyRebate) {this.moneyRebate = moneyRebate;}@Overridepublic double acceptCash(double money) {return money * moneyRebate;}}/* * 返利 */class CashReturn extends CashSuper {private double moneyCondition = 0d;// 返利条件private double moneyReturn = 0d;// 返利值public CashReturn(double moneyCondition, double moneyReturn) {this.moneyCondition = moneyCondition;this.moneyReturn = moneyReturn;}@Overridepublic double acceptCash(double money) {if (money >= moneyCondition) {return money - Math.floor(money / moneyCondition) * moneyReturn;}return money;}}