設計パターン学習——策略モード
2279 ワード
ユーザの需要の変化によって、クラスの中のある方法を常に修正する必要がある方法体、すなわちアルゴリズムを絶えず変化させる必要がある.例えばデパートの商品の割引、会員割引、祝日割引、セールなどです.この時はポリシーモードを使ってこの問題を解決できます.
ストラテジーモード:アルゴリズムを使用するクライアントと独立してアルゴリズムの変化を可能にする一連のアルゴリズムを定義した.
価格戦略のインターフェースコード:
ストラテジーモード:アルゴリズムを使用するクライアントと独立してアルゴリズムの変化を可能にする一連のアルゴリズムを定義した.
価格戦略のインターフェースコード:
package com.psw.strategytest;
public interface PriceInterface {
//
double calculatePrice(double goodsPrice);
}
通常の価格:package com.psw.strategytest;
public class NormalPrice implements PriceInterface {
/**
* ,
*/
public double calculatePrice(double goodsPrice) {
return goodsPrice;
}
}
会員割引の実現:package com.psw.strategytest;
public class VIPPrice implements PriceInterface {
/**
* 9
*/
public double calculatePrice(double goodsPrice) {
// TODO Auto-generated method stub
return goodsPrice*(1.0-0.1);
}
}
祝日割引:package com.psw.strategytest;
public class HolidaySalesPrice implements PriceInterface {
/**
* 8
*/
public double calculatePrice(double goodsPrice) {
// TODO Auto-generated method stub
return goodsPrice*(1.0-0.2);
}
}
商品:package com.psw.strategytest;
public class Goods {
private double price;
private PriceInterface priceInter;
public Goods(PriceInterface priceInter){
this.priceInter = priceInter;
}
public double getPrice() {
return priceInter.calculatePrice(price);
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return price+"";
}
}
テストの実行:package com.psw.strategytest;
public class Main {
public static void main(String[] args) {
//
Goods good1 = new Goods(new NormalPrice());
good1.setPrice(98.8);
System.out.println(" :" + good1.getPrice());
//VIP
Goods good2 = new Goods(new VIPPrice());
good2.setPrice(98.8);
System.out.println("VIP :" + good2.getPrice());
//
Goods good3 = new Goods(new HolidaySalesPrice());
good3.setPrice(98.8);
System.out.println(" :" + good3.getPrice());
}
}
結果: :98.8
VIP :88.92
:79.04