概述
策略模式
策略模式(Strategy):它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。
公共策略接口
public interface CelueInterface {
public abstract double AlgorithmInterface(double money); //策略接口为CelueContext类定义一系列可供重用的算法或行为
}
具体策略类
/**
* 折扣类
*/
public class ConcreteStrategyA implements CelueInterface {
private double celueA;
public ConcreteStrategyA(double celueA){
this.celueA = celueA;
}
@Override
public double AlgorithmInterface(double money) {
System.out.println("策略模式A在执行");
//实现上层策略接口,此处可以实现策略算法
return celueA * money;
}
public double getCelueA() {
return celueA;
}
public void setCelueA(double celueA) {
this.celueA = celueA;
}
}
/**
* 满x减y类
*/
public class ConcreteStrategyB implements CelueInterface {
private double moneyCondition;
private double moneyReturn;
public ConcreteStrategyB(double moneyCondition, double moneyReturn) {
this.moneyCondition = moneyCondition;
this.moneyReturn = moneyReturn;
}
@Override
public double AlgorithmInterface(double money) {
System.out.println("策略模式B在执行");
//实现上层策略接口,此处可以实现策略算法
double result = money;
if(money > moneyCondition) {
//Math.floor(double a)方法返回最大的(最接近正无穷大)浮点值,该值小于或等于参数,并等于某个整数
result = money - Math.floor((money / moneyCondition)) * moneyReturn;
}
return result;
}
public double getMoneyCondition() {
return moneyCondition;
}
public void setMoneyCondition(double moneyCondition) {
this.moneyCondition = moneyCondition;
}
public double getMoneyReturn() {
return moneyReturn;
}
public void setMoneyReturn(double moneyReturn) {
this.moneyReturn = moneyReturn;
}
}
具体实现职责的Context类
public class CelueContext {
private CelueInterface celueInterface;
public CelueContext(CelueInterface celueInterface){
this.celueInterface = celueInterface;
}
public double getResult(double money){
return celueInterface.AlgorithmInterface(money);
}
}
客户端
public class CelueClient {
public static void main(String[] args) {
double originPrice = 500;
CelueContext celueContext = null;
String type = "满300减100";
switch (type) {
case "满300减100":
celueContext = new CelueContext(new ConcreteStrategyB(300, 100));
break;
case "打八折":
celueContext = new CelueContext(new ConcreteStrategyA(0.8));
break;
default:
break;
}
double realPrice = celueContext.getResult(originPrice);
System.out.println("realPrice:" + realPrice);
}
}
总结
策略模式是一种定义一系列算法的方法,从概念上来看,所有算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间耦合。另一个方面的优点是简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。
附:设计模式回顾:策略模式、代理模式、装饰者模式的区别
最后
以上就是自然黑米为你收集整理的《大话设计模式》-策略模式(Java)的全部内容,希望文章能够帮你解决《大话设计模式》-策略模式(Java)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复