一.定義:策略模式定義了算法族,分別封裝起來,讓他們之間可以互相替換,此模式讓算法的變化獨(dú)立于使用算法的客戶。
注:這里所說的算法并不是指“冒泡排序算法”、“搜索算法”之類的算法,它可以是一段代碼、一個(gè)請求、一個(gè)業(yè)務(wù)操作。
比如實(shí)現(xiàn)一個(gè)計(jì)算器功能,如圖:

實(shí)現(xiàn)代碼如下:
Operation接口:
public interface Operation{? ?
????public? int doOperation(int num1,int? num2);
}
具體 實(shí)現(xiàn)類 加法和減法:
public class? ?OperationAdd implements Operation{
? ? @override
????public? int doOperation(int num1,int? num2){
? ? ? ? ? ? return num1+num2;
? ? ?}? ??
? ?}
public class? ?OperationSub implements?Operation{
????????@override
????????public? int doOperation(int num1,int? num2){
????????????return num1-num2;
????????}
?}
計(jì)算器類:
public class Calculator {
? ? private Operation operation;
? ? public void setOperation(Operation operation){
? ? ? ? this.operation = operation;
? ? }
? ? public int doOperation(int num1, int num2){
? ? ? ? return this.operation.doOperation(num1,num2);
? ? }
}
使用:
Calculator calculator = new Calculator();
calculator.setOperation(new OperationAdd());
int result = calculator.doOperation(1,2);
System.out.println(result);
用了策略模式之后代碼比普通寫法多了一些,很好的體現(xiàn)了一個(gè)設(shè)計(jì)模式的基本原則:開閉原則。開閉原則說的是對修改關(guān)閉、對擴(kuò)展開放。對修改關(guān)閉就是不希望別人修改我們的代碼,此路不通,對擴(kuò)展開放就是希望別人以擴(kuò)展的方式增加功能,策略模式把開閉原則體現(xiàn)得淋漓盡致。
最后總結(jié)下策略模式的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):那就是遵循了開閉原則,擴(kuò)展性良好。
缺點(diǎn):1.隨著你的策略增加,你的類也會越來越多。? 2.所有的策略類都要暴露出去,所以如果你在實(shí)際開發(fā)中使用了策略模式,一定要記得寫好文檔讓你的伙伴們知道已有哪些策略,否則根本不知道如何使用。