設計パターン学習——策略モード

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