策略模式

在編寫代碼中,會用到各種算法和策略,我們可以根據(jù)環(huán)境的不同來選擇不同的算發(fā)或者策略來完成該功能。一些簡單的算法:如查找或者排序,我們可以將方法寫在一個算法類中,在我們想要使用的時候就調(diào)用這個類中的某一個方法就可以了。這種代碼方法我們稱之為硬編碼,如果將來需要在app或者客戶端上增加或者修改一種算法,我們就需要去修改客戶端代碼,而且會導(dǎo)致客戶端的代碼變得臃腫不利于維護。

解決方法:義一系列的算法,把每一個算法封裝起來, 并且使它們可相互替換。策略模式使得算法可獨立于使用它的客戶而變化。


策略模式結(jié)構(gòu)圖


Strategy

?Strategy(策略類):定義所有支持的算法的公共接口。 Context使用這個接口來調(diào)用某ConcreteStrategy定義的算法。


ConcreteStrategy

?ConcreteStrategy(具體實現(xiàn)類):封裝了具體的算法或者行為,繼承于Strategy。


Context

Context:用一個ConcreteStrategy對象來配置。維護一個對Strategy對象的引用。可定義一個接口來讓Strategy訪問它的數(shù)據(jù)。


客戶端代碼

在客戶端調(diào)用的時候,首先創(chuàng)建一個context上下文對象,然后傳入我們想要的算法的對象,這個算法的對象我們已經(jīng)在客戶端通過策略模式實現(xiàn)過了,這個時候我們只需要調(diào)用就 可以了。我們在context中的實現(xiàn)方法是ContextInterface(),這個方法正好調(diào)用了Strategy接口的方法,而我們實現(xiàn)策略的ConcreteStrategy實現(xiàn)類也因為重寫了Strategy類的方法,實現(xiàn)了我們想要的算法,才構(gòu)成了我們的策略模式



工廠模式和策略模式的區(qū)別:工廠模式是創(chuàng)建型模式 ,它關(guān)注對象創(chuàng)建,提供創(chuàng)建對象的接口. 讓對象的創(chuàng)建與具體的使用客戶無關(guān)。

策略模式是對象行為型模式 ,它關(guān)注行為和算法的封裝 。它定義一系列的算法,把每一個算法封裝起來, 并且使它們可相互替換。使得算法可獨立于使用它的客戶而變化。

感覺工廠模式更靈活包含的使用方式更多,而策略模式僅僅只是一種相對固定的工具。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1 場景問題# 1.1 報價管理## 向客戶報價,對于銷售部門的人來講,這是一個非常重大、非常復(fù)雜的問題,對不同的...
    七寸知架構(gòu)閱讀 5,133評論 9 62
  • 1 場景問題 1.1 報價管理 向客戶報價,對于銷售部門的人來講,這是一個非常重大、非常復(fù)雜的問題,對不同的客戶要...
    4e70992f13e7閱讀 3,126評論 2 16
  • 本文僅僅為入門,高手勿噴。 實際工作中,我們總會遇到類似如下的需求:某支付系統(tǒng)接入以下幾種商戶進行充值:易寶網(wǎng)易,...
    JarvanMo閱讀 14,259評論 14 26
  • 1.概述 demo地址,歡迎star 例子1: 商場產(chǎn)品銷售:可以正常價格售出,可以打折形式售出,也可以通過積分的...
    barry閱讀 802評論 0 1
  • 1.問題例1:一個菜單功能能夠根據(jù)用戶的“皮膚”首選項來決定是否采用水平的還是垂直的排列形式。同事可以靈活增加菜單...
    小飛豬閱讀 389評論 0 0