1. 程式人生 > >java23中設計模式之策略模式

java23中設計模式之策略模式

log author 批量 isp contex view strategy ext 不同

技術分享

技術分享
package com.bjsxt.strategy;

/**
 * 負責和具體的策略類交互
 * 這樣的話,具體的算法和直接的客戶端調用分離了,使得算法可以獨立於客戶端獨立的變化。
 * 如果使用spring的依賴註入功能,還可以通過配置文件,動態的註入不同策略對象,動態的切換不同的算法.
 * @author Administrator
 *
 */
public class Context {
    private Strategy strategy;    //當前采用的算法對象

    //可以通過構造器來註入
    public Context(Strategy strategy) {
        
super(); this.strategy = strategy; } //可以通過set方法來註入 public void setStrategy(Strategy strategy) { this.strategy = strategy; } public void pringPrice(double s){ System.out.println("您該報價:"+strategy.getPrice(s)); } }
context 技術分享
Strategy.java
strategy
技術分享
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 implements
Strategy { public double getPrice(double standardPrice) { System.out.println("打九折"); return standardPrice*0.9; } }
NewCustomerManyStrategy 技術分享
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中設計模式之策略模式