首页 > 代码库 > [设计模式]策略模式
[设计模式]策略模式
1. 定义
它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响使用算法的客户。
2. 类图
Strategy定义所有算法的公共接口
public interface Strategy { public void algorithmInterface();}
具体算法实现,定义了三种算法,分别为ConcreteStrategyA、ConcreteStrategyB和ConcreteStrategyC
public class ConcreteStrategyA implements Strategy { public void algorithmInterface() { //算法A } }public class ConcreteStrategyB implements Strategy { public void algorithmInterface() { //算法B } }public class ConcreteStrategyC implements Strategy { public void algorithmInterface() { //算法C } }
上下文包含一个Strategy具体策略对象
public class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public void contextInterface() { this.strategy.algorithmInterface(); } }
3.使用策略模式实现针对不同顾客报价小列子
package com.jerry.designpattern;/** * * @author Jerry * @date 2015年1月1日 下午10:44:31 */public interface Strategy { double calcPrice(double price);}package com.jerry.designpattern;/** * * @author Jerry * @date 2015年1月1日 下午10:46:04 */public class NormalCustomerStrategy implements Strategy{ @Override public double calcPrice(double price) { // TODO Auto-generated method stub System.out.println("对于新顾客或普通顾客,没有折扣"); return price; }}package com.jerry.designpattern;/** * * @author Jerry * @date 2015年1月1日 下午10:49:00 */public class OldCustomerStrategy implements Strategy{ @Override public double calcPrice(double price) { // TODO Auto-generated method stub System.out.println("对于老顾客,打5%折扣"); return price * (1 - 0.05); }}package com.jerry.designpattern;/** * * @author Jerry * @date 2015年1月1日 下午10:50:27 */public class VipStrategy implements Strategy{ @Override public double calcPrice(double price) { // TODO Auto-generated method stub System.out.println("对于VIP顾客,打10%折扣"); return price * (1 - 0.1); }}package com.jerry.designpattern;/** * * @author Jerry * @date 2015年1月1日 下午10:51:22 */public class Context { private Strategy strategy; public void setStrategy(Strategy strategy) { this.strategy = strategy; } public double quote(double price) { return this.strategy.calcPrice(price); }}package com.jerry.designpattern;/** * * @author Jerry * @date 2015年1月1日 下午10:53:04 */public class Client { public static void main(String[] args) { Context context = new Context(); Strategy normal = new NormalCustomerStrategy(); context.setStrategy(normal); System.out.println("报价为:" + context.quote(1000)); Strategy old = new OldCustomerStrategy(); context.setStrategy(old); System.out.println("报价为:" + context.quote(1000)); Strategy vip = new VipStrategy(); context.setStrategy(vip); System.out.println("报价为:" + context.quote(1000)); }}
执行main方法,控制台输出如下,实现了不同算法间的切换
[设计模式]策略模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。