《設計模式》之策略模式

定義了算法族,分別封裝起來,讓他們之間可以互相替換,此模式讓算法的變化獨立於使用此算法的客戶。


類型:

行為型設計模式


適用場景:

比如電商平臺的一些常見活動(促銷、滿減、立減、返現等)。

我們還可以這樣理解,在一個系統中有很多類,其區別在於行為不同,策略模式可以讓某個對象動態的選擇某個行為(也就是某個策略)

策略還可以理解為運算符的+ - * / ,旅行時所要乘坐的交通工具,穿衣時所要選擇的衣服...等等等


優點

符合開閉原則

減少if..else等選擇結構語句


缺點

客戶必須知道所有的策略類,並選擇要使用的策略

產生許多策略類


代碼實現

定義Payment.java接口文件

<code>public interface Payment {
public void pay();
}/<code>

創建具體支付策略並實現Payment接口

Alipay.java策略

<code>public class Bankcard implements Payment {
@Override public void pay() {
System.out.println("使用銀行卡付款"); }
}/<code>

Bankcard.java策略

<code>public class Bankcard implements Payment {
@Override public void pay() {
System.out.println("使用銀行卡付款");
}
}/<code>

Wechatpay.java策略

<code>public class Wechatpay implements Payment {
@Override public void pay() {
System.out.println("使用微信支付");
}
}/<code>

創建PaymentSystem.java類封裝具體策略

<code>public class PaymentSystem {
private Payment payment;
public PaymentSystem(Payment payment) {
this.payment = payment;
}

public void execute(){
payment.pay();
}
}/<code>


Client.java類 客戶調用

<code>public class Client {
public static void main(String[] args) {
PaymentSystem paymentSystem=null;
String paymentType="alipay";
if("alipay".equalsIgnoreCase(paymentType)){
paymentSystem=new PaymentSystem(new Alipay());
}else if("bankcard".equalsIgnoreCase(paymentType)){
paymentSystem=new PaymentSystem(new Bankcard());
}else if("wechatpay".equalsIgnoreCase(paymentType)){
paymentSystem=new PaymentSystem(new Wechatpay());
}
paymentSystem.execute();
}
}/<code>

Client類中使用paymentType變量模擬具體配置,然後通過if..else來實現具體的策略


UML類圖


《設計模式》之策略模式


《設計模式》之策略模式


分享到:


相關文章: