策略模式(Strategy)简介

王朝学院·作者佚名  2016-05-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

策略模式(Strategy)简介一、策略模式(Strategy)简介策略模式是行为模式.

行为模式:规定了各个对象应该具备的职责以及对象间的通信模式,它很好的规范了对象间调用和数据传递方式

策略模式适合于算法经常变化的情况

算法的变化不会影响到使用算法的客户,算法可以独立于使用它的客户所变化

二、简单例子普通客户,会员,Vip会员购买商品价格不一样

抽象类

package strategy;/* * 计算商品价格的抽象类 */public abstract class Account {abstract public double getPRice(int amount,double d); }

普通

package strategy;/** * 普通客户商品价格计算 */public class CommonAccount extends Account { @Override public double getPrice(int amount, double price) { return amount*price; }}

会员

package strategy;/** * 普通会员商品价格计算打9折 */public class InsiderAccount extends Account { @Override public double getPrice(int amount, double price) { return amount*price*9/10; }}

VIP

package strategy;/** * VIP会员商品价格计算打8折 */public class VipAccount extends Account { @Override public double getPrice(int amount, double price) { return amount*price*8/10; }}

上下文类

package strategy;/** * 此类用于维护策略类的引用 */public class Context { //引用 private Account account; //初始化 public Context(Account account){ this.account=account; } //调用计算方法 public double doAccount(int amount, double d){ return account.getPrice(amount, d); } }

测试类

package strategy;/** * 此策略模式测试类 */public class Test { public static void main(String[] args) { // 声明商品 String name = "DVD"; int amount = 2; double price = 50; double sum = 0; // 声明对象 // 普通客户 Context context = new Context(new CommonAccount()); sum = context.doAccount(amount, price); System.out.println("普通客户:没有折扣,购买的商品名称: " + name + " 数量: " + amount + " 单价:" + price + " 应付金额:" + sum); // 普通会员 context = new Context(new InsiderAccount()); sum = context.doAccount(amount, price); System.out.println("普通会员:9折优惠,购买的商品名称: " + name + " 数量: " + amount + " 单价:" + price + " 应付金额:" + sum); // VIP context = new Context(new VipAccount()); sum = context.doAccount(amount, price); System.out.println("VIP客户:8折优惠,购买的商品名称: " + name + " 数量: " + amount + " 单价:" + price + " 应付金额:" + sum); }}

结果:

普通客户:没有折扣,购买的商品名称: DVD 数量: 2 单价:50.0 应付金额:100.0普通会员:9折优惠,购买的商品名称: DVD 数量: 2 单价:50.0 应付金额:90.0VIP客户:8折优惠,购买的商品名称: DVD 数量: 2 单价:50.0 应付金额:80.0

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航