策略模式:将可变的部分从程序中抽象分离成算法接口,在该接口下分别封装一系列算法实现。并使他们能够相互替换,从而致使客户端程序独立于算法的改变。java
优势:算法
缺点:ide
//策略接口 public interface MemberStrategy { /** * 计算图书的价格 * @param bookPrice 图书的原价 * @return 打折后的价格 */ public double calcPrice(double bookPrice); } //初级会员优惠策略 public class PrimaryMemberStrategy implements MemberStrategy{ @Override public double calcPrice(double bookPrice) { System.out.println("初级会员没有折扣"); return bookPrice; } } //中级会员优惠策略 public class IntermediateMemberStrategy implements MemberStrategy{ @Override public double calcPrice(double bookPrice) { System.out.println("中级会员折扣20%"); return bookPrice * 0.8; } } //高级会员优惠策略 public class AdvancedMemberStrategy implements MemberStrategy { @Override public double calcPrice(double bookPrice) { System.out.println("高级会员折扣50%"); return bookPrice * 0.5; } } // public class Price { private MemberStrategy memberStrategy; public Price(MemberStrategy memberStrategy){ this.memberStrategy = memberStrategy; } public double quote(double bookPrice){ return this.memberStrategy.calcPrice(bookPrice); } } //测试 public static void main(String[] args) { MemberStrategy strategy = new AdvancedMemberStrategy(); Price price = new Price(strategy); System.out.println(price.quote(200D)); }