做网站找我们,用深度liunx做网站,flash做ppt的模板下载网站有哪些,wordpress换主题后打不开策略模式
策略模式对应与解决某一个问题的一个算法族#xff0c;允许用户从该算法族中任选一个算法解决某一问题#xff0c;同时可以方便的更换算法或者增加新的算法。并且由客户端决定调用哪个算法。
本质
分离算法#xff0c;选择实现#xff1b;
策略模式角色
上下…策略模式
策略模式对应与解决某一个问题的一个算法族允许用户从该算法族中任选一个算法解决某一问题同时可以方便的更换算法或者增加新的算法。并且由客户端决定调用哪个算法。
本质
分离算法选择实现
策略模式角色
上下文类(Context) 维护了一个策略类的引用并将客户端的请求委托给具体策略类处理抽象策略类(Strategy) 定义了具体的算法方法具体策略类(ConcreteStrategy) 对抽象策略类的算法具体实现
开发中常见的场景
spring框架中Resource接口资源访问策略springmvc框架中controller方法入参解析shiro框架中权限的认证策略
场景
某个市场人员接到单后的报价策略(CRM系统中常见问题)。报价策略很复杂可以简单作如下分类 普通客户小批量报价普通客户大批量报价老客户小排量报价老客户大批量报价 具体选用哪个报价策略这需要根据实际情况来确定。这时候我们采用策略模式即可。
代码实现
抽象策略类(Strategy)
/*** 抽象算法 接口*/
public interface Strategy {double getPrice(double standardPrice);
}具体策略类(ConcreteStrategy)
/*** 新客户小批量*/
public class NewCustomerFewStrategy implements Strategy{Overridepublic double getPrice(double standardPrice) {System.out.println(不好意思不打折原件);return standardPrice;}
}
/*** 新客户大批量*/
public class newCustomermanyStrategy implements Strategy{Overridepublic double getPrice(double standardPrice) {System.out.println(九折);return standardPrice*0.9;}
}
/*** 老客户小批量*/
public class OldCustomerFewStrategy implements Strategy{Overridepublic double getPrice(double standardPrice) {System.out.println(八五折);return standardPrice*0.85;}
}
/*** 老客户大批量*/
public class OldCustomermanyStrategy implements Strategy{Overridepublic double getPrice(double standardPrice) {System.out.println(七折); return standardPrice*0.7; }
}上下文类(Context)
/*** 负责和具体的策略类交互* 这样的话具体的算法和直接的客户端调用分离了使得算法可以独立于客户端独立的变化*/
public class Context {private Strategy strategy;public Context(Strategy strategy) {this.strategy strategy;}public void setStrategy(Strategy strategy) {this.strategy strategy;}public void PrintPrice(double s){System.out.println(你该报价:strategy.getPrice(s));}
}客户端调用
public static void main(String[] args) {Strategy stnew OldCustomermanyStrategy();Context ctnew Context(st);ct.PrintPrice(999);
}更多设计模式学习 设计模式(1)介绍 设计模式(2)单例模式 设计模式(3)工厂模式 设计模式(4)建造者模式 设计模式(5)原型模式 设计模式(6)桥接模式 设计模式(7)装饰器模式 设计模式(8)组合模式 设计模式(9)外观模式 设计模式(10)享元模式 设计模式(11)适配器模式 设计模式(12)代理模式 设计模式(13)模板方法模式 设计模式(14)命令模式 设计模式(15)迭代器模式 设计模式(16)观察者模式 设计模式(17)中介者模式 设计模式(18)状态模式 设计模式持续更新中…