ios設計模式 - 策略
1. 把解決相同問題的演算法抽象成策略(相同問題指的是輸入引數相同,但根據演算法不同輸出引數會有差異)
2. 策略被封裝在物件之中(是物件內容的一部分),策略改變的是物件的內容.如果從外部擴充套件了物件的行為,就不叫策略模式,而是裝飾模式.
3. 策略模式可以簡化複雜的判斷邏輯(if - else)
4. 如果對物件導向基本原理以及設計模式基本原理不熟悉,本教程會變得難以理解.原始碼
//
// inputvalidator.h
// strategypattern
//// created by youxianming on 15/7/26.
//#import #import #define empty_input @"輸入為空"
@inte***ce inputvalidator : nsobject
/** * 抽象策略
* * @param input 當前輸入textfield
* * @return 輸入驗證是否合法
*/- (bool)validateinput:(uitextfield *)input;
/** * 錯誤資訊
*/@property (nonatomic, strong) nsstring *errormessage;
@end
//
// inputvalidator.m
// strategypattern
//// created by youxianming on 15/7/26.
//#import "inputvalidator.h"
@implementation inputvalidator
- (bool)validateinput:(uitextfield *)input
@end
//
// customfield.h
// strategypattern
//// created by youxianming on 15/7/26.
//#import #import "inputvalidator.h"
@inte***ce customfield : uitextfield
/** * 抽象策略
*/@property (nonatomic, strong, readonly) inputvalidator *inputvalidator;
/** * 初始化textfield
* * @param frame
* @param inputvalidator 驗證策略
* * @return 例項物件
*/- (instancetype)initwithframe:(cgrect)frame withinputvalidator:(inputvalidator *)inputvalidator;
/** * 對應於具體策略的返回值
* * @return 是否合格
*/- (bool)validate;
@end
//
// customfield.m
// strategypattern
//// created by youxianming on 15/7/26.
//#import "customfield.h"
@inte***ce customfield ()
/** * 抽象策略
*/@property (nonatomic, strong) inputvalidator *inputvalidator;
@end
@implementation customfield
#pragma mark - 初始化
- (instancetype)initwithframe:(cgrect)frame withinputvalidator:(inputvalidator *)inputvalidator
return self;
}- (void)setup
- (bool)validate
@end
分析
策略模式對比示意圖(抽象類與具體實現的詳細對比)
策略被封裝在物件之中(是物件內容的一部分),策略改變的是物件的內容的
簡化了 if - else 操作(按照以前的寫法,有幾個textfield判斷,就得寫幾個if - else,還有,實現細節暴露出來,維護困難 -_-!!)
iOS設計模式 策略模式
定義一系列演算法,把它們乙個個封裝起來,並且使它們可互相替換。策略模式中的乙個關鍵角色是策略類,它為所有支援的或相關的演算法宣告了乙個共同介面。場景物件使用策略介面呼叫由具體策略類定義的演算法。1 抽象策略角色 通常有乙個介面或乙個抽象類實現 3 環境角色 持有乙個策略類的應用,最終供客戶端呼叫 乙...
iOS開發設計策略模式
ios應用能加密?全球都沒有的技術,你造嗎?作為開發ios應用的,是不是感到自己out啦?快來看看什麼是ios應用加密 在ios開發中,使用官方框架,官方sdk中,可以接觸到不少設計模式,可能平時沒有注意,實際上已經用到了不少設計模式 下面舉乙個例子 比方我有乙個nsmutablearray,裡面每...
iOS 策略模式
oop中三個原則 封裝 繼承 多型,取經位址 策略模式我理解應該是演算法在源 中就已經配對好了,例如針對多個輸入框內容的判斷,有郵箱的判斷 手機號 姓名 年齡等不同種功能,這樣情況一開始就會對每乙個輸入進行分配他的策略,然後在判斷的時候根據他們自己策略演算法執行。場景一 出遊路線 下拉列表 簡單粗暴...