現使用政策模式來設計該系統,繪制類圖并程式設計實作
UML類圖
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CM2gDN1YjZ2YDOxQzYyEWZyYzXxITNwYTMzAzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
書籍
package com.zheng;
public class Book {
private double price;// 價格
private Discount discount;// 維持一個對抽象折扣類的引用
// 調用折扣類的折扣計算方法
public double getPrice() {
return discount.calculate(this.price);
}
public void setPrice(double price) {
this.price = price;
}
public void setDiscout(Discount discount) {
this.discount = discount;
}
}
調用不同價格的接口
package com.zheng;
public interface Discount {
public double calculate(double price);//計算價格
}
具體實作折扣
package com.zheng;
public class ComputerBook implements Discount {
private final double DISCOUNT=0.9;//購買計算機類書籍90%的折扣
@Override
public double calculate(double price) {
System.out.println("計算機類書籍");
return price*DISCOUNT;
}
}
package com.zheng;
public class LanguageBook implements Discount {
private final double DISCOUNT=2;
@Override
public double calculate(double price) {
System.out.println("語言類書籍");
return price-DISCOUNT;
}
}
package com.zheng;
public class NovelBook implements Discount {
private final double DISCOUNT=10;
@Override
public double calculate(double price) {
System.out.println("小說");
if(price>=100) {
return price-DISCOUNT;
}
else
return price;
}
}
測試端
package com.zheng;
public class Client {
public static void main(String[] args) {
Discount discount,discount1,discount2;
Book book=new Book();
double originalPrice=100;//原價
book.setPrice(originalPrice);
System.out.println("原價為:"+originalPrice+"元");
System.out.println("------------------------------");
discount=new ComputerBook();
book.setDiscout(discount);
System.out.println("折扣後的價格:"+book.getPrice());
System.out.println("------------------------------");
discount1=new LanguageBook();
book.setDiscout(discount1);
System.out.println("折扣後的價格:"+book.getPrice());
System.out.println("------------------------------");
discount2=new NovelBook();
book.setDiscout(discount2);
System.out.println("折扣後的價格:"+book.getPrice());
}
}
測試截圖