設計模式練習(19)——策略模式

策略模式

一、題目:

設計一個網上書店,該系統中所有的計算機圖書(ComputerBook),每本都有10%的折扣;所有的語言類圖書(LanguageBook),每本有2元的折扣;小說類圖書以每100元有10元的折扣,用策略模式設計該系統
(1)繪製策略模式結構視圖
(2)給出實例類圖並實現代碼

二、所用模式結構視圖:

這裏寫圖片描述

三、實例類圖:

這裏寫圖片描述

四、實例實現代碼:

(因爲區分,所以在類的前面加了Gj19)

策略接口

package gjStrategyPattern;

/**
 * 策略接口
 * @author gong
 *
 */
public interface Gj19BookStrategy {
    double calPrice(double price);
}

計算機書籍打折策略

package gjStrategyPattern;
/**
 * 計算機書籍打折策略
 * @author gong
 *
 */
public class Gj19ComputerStrategy implements Gj19BookStrategy{
    /**
     * 具體的打折策略
     */
    @Override
    public double calPrice(double price) {
        System.out.println("所有的計算機圖書 每本都有10%的折扣");
        return price*0.9D;
    }
    public Gj19ComputerStrategy() {
    }

}

語言書籍打折策略類

package gjStrategyPattern;

/**
 * 語言書籍打折策略類
 * @author gong
 *
 */
public class Gj19LanguageStrategy implements Gj19BookStrategy{

    /**
     * 每本書減去2元
     */
    @Override
    public double calPrice(double price) {
        System.out.println("語言類圖書 每本有2元的折扣");
        return price-2.0D;
    }
    public Gj19LanguageStrategy() {
    }

}

小說的打折策略類

package gjStrategyPattern;

/**
 * 小說的打折策略類
 * 
 * @author gong
 *
 */
public class Gj19NovelStrategy implements Gj19BookStrategy {

    @Override
    public double calPrice(double price) {
        System.out.println("小說類圖書以每100元有10元的折扣");
        int p = (int) price;
        return price-(double)(p/100*10);
    }

    public Gj19NovelStrategy() {
    }
}

計算價格的類

package gjStrategyPattern;

/**
 * 計算價格的類
 * @author gong
 *
 */
public class Gj19Price {
    /**
     * 創建抽象的策略模式
     */
    private Gj19BookStrategy bookStrategy;

    public Gj19Price(Gj19BookStrategy bookStrategy){
        this.bookStrategy = bookStrategy;
    }

    public double sum(double price){
        return this.bookStrategy.calPrice(price);
    }

}

策略模式客戶端

package gjStrategyPattern;

/**
 * 策略模式客戶端
 * @author gong
 *
 */
public class Client {
    //調用計算機書籍的打折策略
    public static void main(String[] args) {
        //定義具體的打折策略
        Gj19ComputerStrategy computerStrategy = new Gj19ComputerStrategy();
        Gj19LanguageStrategy gj19LanguageStrategy = new Gj19LanguageStrategy();
        Gj19NovelStrategy gj19NovelStrategy = new Gj19NovelStrategy();  
        //原價 折後價
        double price = 520.0D;
        double discountPrice;   
        //計算機書籍打折策略
        System.out.println("========================計算機書籍打折策略=======================");
        System.out.println("打折前的價格爲:"+price);
        discountPrice = new Gj19Price(computerStrategy).sum(price);
        System.out.println("打折後的價格爲:"+discountPrice);
        System.out.println("================================================================"); 
        //語言書籍打折策略
        System.out.println("=========================語言書籍打折策略========================");
        System.out.println("打折前的價格爲:"+price);
        discountPrice = new Gj19Price(gj19LanguageStrategy).sum(price);
        System.out.println("打折後的價格爲:"+discountPrice);
        System.out.println("================================================================");
        //小說書籍打折策略
        System.out.println("==========================小說書籍打折策略=======================");
        System.out.println("打折前的價格爲:"+price);
        discountPrice = new Gj19Price(gj19NovelStrategy).sum(price);
        System.out.println("打折後的價格爲:"+discountPrice);
    }
}

五、運行結果:

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章