设计模式---策略模式

image.png

只是自己日常做一些笔记

采用策略模式模拟一次专卖店的计价操作

Strategy类
package com.mjt.learning.pattern.strategy;

/**
 * Copyright:Learning
 * Author: liyang 
* Date:2019/3/6 5:17 PM
* Desc:定义计算价格的接口
*/ public interface Strategy { /** * @param goodsPrice 原价 * @return 实际价格 */ double calcPrice(double goodsPrice); }

具体的计算策略
普通用户的购物计价规则

package com.mjt.learning.pattern.strategy;

/**
 * Copyright:Learning
 * Author: liyang 
* Date:2019/3/6 5:19 PM
* Desc: 普通用户的价格计算策略
*/ public class NormalCustomerStrategy implements Strategy { @Override public double calcPrice(double goodsPrice) { System.out.println("普通用户没有折扣"); return goodsPrice; } }

VIP用户

package com.mjt.learning.pattern.strategy;

/**
 * Copyright:Learning
 * Author: liyang 
* Date:2019/3/6 5:20 PM
* Desc:VIP的价格计算策略
*/ public class VipStrategy implements Strategy { @Override public double calcPrice(double goodsPrice) { System.out.println("VIP客户价格打八折"); return goodsPrice * 0.8; } }

超级VIP

package com.mjt.learning.pattern.strategy;

/**
 * Copyright:Learning
 * Author: liyang 
* Date:2019/3/6 5:21 PM
* Desc: 超级VIP计算策略
*/ public class SVipStrategy implements Strategy { @Override public double calcPrice(double goodsPrice) { System.out.println("超级VIP用户7折!"); return goodsPrice * 0.7; } }

Calculator计算器

package com.mjt.learning.pattern.strategy;

/**
 * Copyright:Learning
 * Author: liyang 
* Date:2019/3/6 5:25 PM
* Desc: 相当于Context
*/ public class Calculator { /** * Context 持有一个策略对象 */ private Strategy strategy = null; public Calculator(Strategy strategy) { this.strategy = strategy; } /** * 原价 * * @param originPrice 商品原价 * @return 不同用户的对应的价格 */ public double calcPrice(double originPrice) { return strategy.calcPrice(originPrice); } public void changeStrategy(Strategy strategy) { this.strategy = strategy; } }

Client

package com.mjt.learning.pattern.strategy;

/**
 * Copyright:Learning
 * Author: liyang 
* Date:2019/3/6 5:28 PM
* Desc:
*/ public class Client { public static void main(String[] args) { double price=100d; Strategy strategy=new NormalCustomerStrategy(); Calculator calculator=new Calculator(strategy); System.out.println(calculator.calcPrice(price)); strategy=new VipStrategy(); calculator.changeStrategy(strategy); System.out.println(calculator.calcPrice(price)); strategy=new SVipStrategy(); calculator.changeStrategy(strategy); System.out.println(calculator.calcPrice(price)); } }

打印结果

普通用户没有折扣
100.0
VIP客户价格打八折
80.0
超级VIP用户7折!
70.0

你可能感兴趣的:(设计模式---策略模式)