您的位置:首页 > 编程语言 > Java开发

26种设计模式之策略模式

2017-03-13 17:32 316 查看

策略模式是对算法的封装,让算法可以互相替换,算法的替换不影响客户端的使用

比如以商场折扣的为例,可能是打折,也有可能是返现,我们要封装算法进行互相替换

抽象的策略类

package com.lizhenbo.strategy;
/**
* 抽象的算法策略,所有的具体算法都必须继承该抽象类
* @author LIZHENBO
*/
public abstract class PriceStrategy {

public abstract double getPrice(double totalPrice);

}


正常收费的算法策略

package com.lizhenbo.strategy;
/**
* 正常收费的算法类
* @author LIZHENBO
*
*/
public class PriceNormal extends PriceStrategy {

@Override
public double getPrice(double totalPrice) {
return totalPrice;
}

}


打折收费的算法策略

package com.lizhenbo.strategy;
/**
* 打折收费的算法类
* @author LIZHENBO
*
*/
public class PriceDiscount extends PriceStrategy {

@Override
public double getPrice(double totalPrice) {
return totalPrice*0.8;
}

}


返现收费的算法策略

package com.lizhenbo.strategy;
/**
* 返现收费的算法类
* @author LIZHENBO
*
*/
public class PriceReturn extends PriceStrategy {

@Override
public double getPrice(double totalPrice) {
if(totalPrice>=100){
totalPrice=totalPrice-20;
}
return totalPrice;
}

}


维持有一个算法策略

package com.lizhenbo.strategy;
/**
* 维持有一个算法策略
* @author LIZHENBO
*/
public class PriceContext {
//维持有一个算法策略
private PriceStrategy priceStrategy;
//在构造方法中,初始化算法策略
public PriceContext(PriceStrategy priceStrategy){
this.priceStrategy=priceStrategy;
}
//使用算法策略
public double getprice(double totalPrice){
return priceStrategy.getPrice(totalPrice);
}

}


测试类

package com.lizhenbo.strategy;

import java.util.Scanner;

public class Test {

public static void main(String[] args) {
//总价格
double totalPrice=100;
//定义一个返现的算法策略
PriceStrategy priceStrategy=new PriceReturn();
//传入算法策略
PriceContext priceContext=new PriceContext(priceStrategy);
//计算折扣后的价格
double getprice = priceContext.getprice(totalPrice);
//输出
System.out.println("折扣后的价格是:"+getprice);
}
}


输出结果:

折扣后的价格是:80.0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息