java23中設計模式之策略模式
阿新 • • 發佈:2017-09-24
log author 批量 isp contex view strategy ext 不同
package com.bjsxt.strategy; /** * 負責和具體的策略類交互 * 這樣的話,具體的算法和直接的客戶端調用分離了,使得算法可以獨立於客戶端獨立的變化。 * 如果使用spring的依賴註入功能,還可以通過配置文件,動態的註入不同策略對象,動態的切換不同的算法. * @author Administrator * */ public class Context { private Strategy strategy; //當前采用的算法對象 //可以通過構造器來註入 public Context(Strategy strategy) {contextsuper(); this.strategy = strategy; } //可以通過set方法來註入 public void setStrategy(Strategy strategy) { this.strategy = strategy; } public void pringPrice(double s){ System.out.println("您該報價:"+strategy.getPrice(s)); } }
Strategy.javastrategy
package com.bjsxt.strategy; public class NewCustomerFewStrategy implements Strategy { public double getPrice(double standardPrice) { System.out.println("不打折,原價"); return standardPrice; } }NewCustomerFewStrategy
package com.bjsxt.strategy; public class NewCustomerManyStrategy implementsNewCustomerManyStrategyStrategy { public double getPrice(double standardPrice) { System.out.println("打九折"); return standardPrice*0.9; } }
package com.bjsxt.strategy; public class OldCustomerFewStrategy implements Strategy { public double getPrice(double standardPrice) { System.out.println("打八五折"); return standardPrice*0.85; } }OldCustomerFewStrategy
package com.bjsxt.strategy; public class OldCustomerManyStrategy implements Strategy { public double getPrice(double standardPrice) { System.out.println("打八折"); return standardPrice*0.8; } }OldCustomerManyStrategy
package com.bjsxt.strategy; public class Client { public static void main(String[] args) { Strategy s1 = new OldCustomerManyStrategy(); Context ctx = new Context(s1); ctx.pringPrice(998); } }Client
package com.bjsxt.strategy; /** * 實現起來比較容易,符合一般開發人員的思路 * 假如,類型特別多,算法比較復雜時,整個條件語句的代碼就變得很長,難於維護。 * 如果有新增類型,就需要頻繁的修改此處的代碼! * 不符合開閉原則! * @author Administrator * */ public class TestStrategy { public double getPrice(String type, double price) { if (type.equals("普通客戶小批量")) { System.out.println("不打折,原價"); return price; } else if (type.equals("普通客戶大批量")) { System.out.println("打九折"); return price * 0.9; } else if (type.equals("老客戶小批量")) { System.out.println("打八五折"); return price * 0.85; } else if (type.equals("老客戶大批量")) { System.out.println("打八折"); return price * 0.8; } return price; } }View Code
java23中設計模式之策略模式