設(shè)計(jì)模式之策略模式(Strategy)

1. 什么是策略模式?

策略模式 定義了算法族,分別封裝起來(lái), 讓它們之間可以互相替換,此模式讓算法的變化獨(dú)立于使用算法的用戶

策略模式包含三個(gè)角色:
1. Context(環(huán)境):持有一個(gè)Strategy的引用。
2. Strategy(抽象策略):這是一個(gè)抽象角色,通常由一個(gè)接口或抽象類實(shí)現(xiàn)。定義了具體策略類所需實(shí)現(xiàn)的算法。
3. ConcreteStrategy(具體策略):封裝了具體的算法實(shí)現(xiàn)。

2. 策略模式用來(lái)干什么?

策略模式可以在運(yùn)行時(shí)動(dòng)態(tài)的改變算法,前提是用戶需要知道所有的算法,然后進(jìn)行選擇。(用戶只有選擇權(quán))

3. 怎么實(shí)現(xiàn)策略模式?

我們來(lái)用計(jì)算器來(lái)模擬一個(gè)策略模式的例子,不一定合適,主要就是那么個(gè)意思。

首先我們定義一個(gè)計(jì)算器的類(Context),它持有一個(gè)計(jì)算的操作接口(Strategy),具體的加減乘除操作由子類(ConcreteStrategy)實(shí)現(xiàn)。

package com.strategy;
//計(jì)算器
public class Calculator {

    private Calculation calculation;

    public Calculator(Calculation calculation) {
        this.calculation = calculation;
    }

    public Double execute(String numb1, String numb2) {
        return calculation.operation(Double.parseDouble(numb1), Double.parseDouble(numb2));
    }
}

package com.strategy;
//操作
public interface Calculation {

    Double operation(Double numb1, Double numb2);
}

package com.strategy;
//加法操作
public class Addition implements Calculation {
    @Override
    public Double operation(Double numb1, Double numb2) {
        return numb1 + numb1;
    }
}

package com.strategy;
//減法操作
public class Subtraction implements Calculation {
    @Override
    public Double operation(Double numb1, Double numb2) {
        return numb1 - numb2;
    }
}

package com.strategy;
//乘法操作
public class Multiplication implements Calculation {
    @Override
    public Double operation(Double numb1, Double numb2) {
        return numb1 * numb2;
    }
}

package com.strategy;
//除法操作
public class Division implements Calculation {
    @Override
    public Double operation(Double numb1, Double numb2) {
        return numb1 / numb2;
    }
}

測(cè)試:

我們使用策略模式,封裝了具體的算法,用戶只用選擇某種算法,而不需要知道具體的實(shí)現(xiàn),而當(dāng)需要新增或者修改算法時(shí),也不會(huì)影響到原有的操作。

我們可以舉幾個(gè)具體的場(chǎng)景來(lái)理解,比如說(shuō),現(xiàn)在的支付方式(微信,支付寶,銀行卡),用戶只能在提供的幾種支付方式中選擇一種。
還有比如 以不同的格式保存文件、不同的算法壓縮文件等等之類的都可以用策略模式來(lái)實(shí)現(xiàn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容