什麼是Strategy策略?
Strategy策略是定義一系列的算法,把它們一個個封裝起來,並且使它們可以相互替換。此模式使得算法可以獨立於使用它們的客戶而變化。策略模式的主要目的是隔離算法。
Strategy策略的適用範圍
Strategy策略的示例
import java.util.ArrayList;
import java.util.List;
// Sample Strategy design pattern
public class JavaApplication8 {
public static void main(String[] args){
Customer a = new Customer();
a.setStrategy(new NormalStrategy());
// Normal billing
a.add(1.2,1);
// Start Happy Hour
a.setStrategy(new HappyHourStrategy());
a.add(1.2,2);
// New Customer
Customer b = new Customer();
b.setStrategy(new HappyHourStrategy());
b.add(0.8,1);
// The Customer Pays
a.printBill();
// End Happy Hour
b.setStrategy(new NormalStrategy());
b.add(1.3,2);
b.add(2.5,1);
b.printBill();
}
}
class Customer{
private List<Double> drinks;
private BillingStrategy strategy;
public Customer() {
this.drinks = new ArrayList<Double>();
}
// Add items to tab
public void add(double price, int quantity){
drinks.add(price*quantity);
}
// Payment of bill
public void printBill(){
System.out.println("Total due: " + strategy.sum(drinks));
drinks.clear();
}
// Set Strategy
public void setStrategy(BillingStrategy strategy) {
this.strategy = strategy;
}
}
interface BillingStrategy{
// Return total price of drinks consumed
public double sum(List<Double> drinks);
}
// Normal billing strategy (unchanged price)
class NormalStrategy implements BillingStrategy{
public double sum(List<Double> drinks) {
double sum = 0;
for(Double i : drinks){
sum += i;
}
return sum;
}
}
// Strategy for Happy hour (10% discount)
class HappyHourStrategy implements BillingStrategy{
public double sum(List<Double> drinks) {
double sum = 0;
for(Double i : drinks){
sum += i;
}
return sum*0.9;
}
}