策略模式是行為模式.
行為模式:規定了各個對象應該具備的職責以及對象間的通信模式,它很好的規范了對象間調用和數據傳遞方式
策略模式適合于算法經常變化的情況
算法的變化不會影響到使用算法的客戶,算法可以獨立于使用它的客戶所變化

普通客戶,會員,Vip會員購買商品價格不一樣
抽象類
package strategy;/* * 計算商品價格的抽象類 */public abstract class Account {abstract public double getPRice(int amount,double d); }普通
package strategy;/** * 普通客戶商品價格計算 */public class CommonAccount extends Account { @Override public double getPrice(int amount, double price) { return amount*price; }}會員
package strategy;/** * 普通會員商品價格計算打9折 */public class InsiderAccount extends Account { @Override public double getPrice(int amount, double price) { return amount*price*9/10; }}VIP
package strategy;/** * VIP會員商品價格計算打8折 */public class VipAccount extends Account { @Override public double getPrice(int amount, double price) { return amount*price*8/10; }}上下文類
package strategy;/** * 此類用于維護策略類的引用 */public class Context { //引用 private Account account; //初始化 public Context(Account account){ this.account=account; } //調用計算方法 public double doAccount(int amount, double d){ return account.getPrice(amount, d); } }測試類
package strategy;/** * 此策略模式測試類 */public class Test { public static void main(String[] args) { // 聲明商品 String name = "DVD"; int amount = 2; double price = 50; double sum = 0; // 聲明對象 // 普通客戶 Context context = new Context(new CommonAccount()); sum = context.doAccount(amount, price); System.out.println("普通客戶:沒有折扣,購買的商品名稱: " + name + " 數量: " + amount + " 單價:" + price + " 應付金額:" + sum); // 普通會員 context = new Context(new InsiderAccount()); sum = context.doAccount(amount, price); System.out.println("普通會員:9折優惠,購買的商品名稱: " + name + " 數量: " + amount + " 單價:" + price + " 應付金額:" + sum); // VIP context = new Context(new VipAccount()); sum = context.doAccount(amount, price); System.out.println("VIP客戶:8折優惠,購買的商品名稱: " + name + " 數量: " + amount + " 單價:" + price + " 應付金額:" + sum); }}結果:
普通客戶:沒有折扣,購買的商品名稱: DVD 數量: 2 單價:50.0 應付金額:100.0普通會員:9折優惠,購買的商品名稱: DVD 數量: 2 單價:50.0 應付金額:90.0VIP客戶:8折優惠,購買的商品名稱: DVD 數量: 2 單價:50.0 應付金額:80.0
新聞熱點
疑難解答