策略模式,个人理解是,将一个算法抽出来,定义一个接口声明,给出所有的具体策略类所需的接口,各子类implement接口,然后在各自的子类写出各自的实现,这样不会相互影响,并且可以做各种替换,最后写一个持有一个抽象策略的引用的类。
例题:
假设现在要设计一个贩卖各类书籍的电子商务网站的购物车系统。一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这要复杂。比如,本网站可能对所有的高级会员提供每本20%的促销折扣;对中级会员提供每本10%的促销折扣;对初级会员没有折扣。
根据描述,折扣是根据以下的几个算法中的一个进行的:
算法一:对初级会员没有折扣。
算法二:对中级会员提供10%的促销折扣。
算法三:对高级会员提供20%的促销折扣。
使用策略模式来实现的结构图如下:

参考代码:
public class Demo {
public static void main(String[] args) {
MemberStrategy ms = new IntermediateMember();
Price p = new Price(ms);
System.out.println(p.getPrice(100));
}
}
interface MemberStrategy{
public double getPrice(double price);
}
class PrimaryMember implements MemberStrategy{
@Override
public double getPrice(double price) {
return price;
}
}
class IntermediateMember implements MemberStrategy{
@Override
public double getPrice(double price) {
return price*0.9;
}
}
class AdvanceMember implements MemberStrategy{
@Override
public double getPrice(double price) {
return price*0.8;
}
}
class Price{
private MemberStrategy memberStrategy;
public Price(MemberStrategy ms) {
this.memberStrategy = ms;
}
public double getPrice(double price){
return this.memberStrategy.getPrice(price);
}
}
运行效果:

参考: 《JAVA与模式》之策略模式