策略模式:策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。如某一网站针对不同的等级的用户实行不同的打折策略。
策略模式:
-
定义了一组算法(业务规则);
-
封装了每个算法;
-
这组算法可互换代替(interchangeable)
//定义一个打折的策略接口
public interface DiscountStrategy {
double discount(double money);
}
//定义一个超级会员实现打折策略的接口
public class Svip implements DiscountStrategy{
private double rebate;
public Svip(double rebate){
this.rebate=rebate;
}
@Override
public double discount(double money) {
return money * rebate;
}
}
//定义一个会员实现打折策略接口
public class Vip implements DiscountStrategy {
private double rebate;
public Vip(double rebate) {
this.rebate = rebate;
}
@Override
public double discount(double money) {
return money * rebate;
}
}
//定义一个普通用户实现打折策略
public class User implements DiscountStrategy {
//普通用户不打折
@Override
public double discount(double money) {
return money;
}
}
//测试
public class Test {
public static void main(String[] args) {
StrategyImpl strategyImpl;
strategyImpl=new StrategyImpl("svip");
double svip = strategyImpl.discountImpl(1000);
System.out.println("超级会员的价格"+svip);
strategyImpl=new StrategyImpl("vip");
double vip=strategyImpl.discountImpl(1000);
System.out.println("普通会员的价格"+vip);
strategyImpl=new StrategyImpl("user");
double user=strategyImpl.discountImpl(1000);
System.out.println("普通用户的价格"+user);
}
}
优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。
缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。
策略模式的类图: