設計模式練習(19)——策略模式
阿新 • • 發佈:2019-01-07
策略模式
一、題目:
設計一個網上書店,該系統中所有的計算機圖書(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);
}
}
五、執行結果: