設(shè)計(jì)模式學(xué)習(xí)-策略模式

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

注:這里所說的算法并不是指“冒泡排序算法”、“搜索算法”之類的算法,它可以是一段代碼、一個(gè)請求、一個(gè)業(yè)務(wù)操作。

比如實(shí)現(xiàn)一個(gè)計(jì)算器功能,如圖:


圖1

實(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ā)中使用了策略模式,一定要記得寫好文檔讓你的伙伴們知道已有哪些策略,否則根本不知道如何使用。

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

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