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)。