本篇文章主要講三個點:
1. 什麼是策略模式.
2. 策略模式的優缺點.
3. demo .
1. 策略模式
定義一系列演算法, 並且將每個演算法封裝起來, 演算法之間可以互相替換. 使用前提: 輸入已知, 好比你渴了, 可以喝可樂, 可以喝牛奶, 也可以喝水.
在我們專案中比較常見的使用情況:
1. 切換主題, 要展示圖片, 只是展示的圖片不同而已.
2. 更換顯示狀態, 總用淘寶的人知道, 展示介面可以是一排一個 cell, 也可以是一排兩個 cell.
放一張圖簡單明瞭:
2. 策略模式的優缺點
優點: 邏輯清晰, 程式碼維護性強
缺點: 程式碼量會增大一些, 應用場景侷限
3. demo
策略最重要的一點是策略類, 它是一個抽象類, 下面有幾個具體的實現類, 來實現抽象類中的抽放方法. Context 為場景類, 場景類聚合策略類就是策略模式啦, 下面用一個 demo 來再說明一下:
兩個輸入框, 兩個按鈕, 分別驗證輸入的是否是純數字和純英文, 這裡有一個策略類 InputTest, 具體實現類: InputNumTest 和 InputEnglishTest, 場景類: 子類化的輸入框類 MRTextField
抽象類 InputTest 裡面有個兩個方法和一個屬性, testInputWithTextField: 用於驗證輸入, testRegexWithRegix:andText: 用於檢測正則, desc 為檢測錯誤時的欄位描述.
InputEnglishTest 裡面寫的和 InputNumTest 一樣, 只是正則不同, 就直放上 InputNumTest 的截圖啦, InputNumTest 繼承自 InputTest 類, 實現其抽象方法, 根據傳入的 tf 驗證輸入是否正確.
子類化的輸入框類, 聚合了策略類 InputTest, checkInput 用於檢測輸入是否正確, desc 為檢測錯誤時的描述, .m 檔案實現了 checkInput 方法, 用 self.iputTest 檢測輸入是否正確.
ViewController.m 裡實現了具體程式碼, 初始化策略類, 當檢測的時候呼叫 [tf checkInput] 即可檢測輸入了.