iOS設計模式 策略模式

2021-10-04 01:23:19 字數 1772 閱讀 1896

定義一系列演算法,把它們乙個個封裝起來,並且使它們可互相替換。

策略模式中的乙個關鍵角色是策略類,它為所有支援的或相關的演算法宣告了乙個共同介面。

場景物件使用策略介面呼叫由具體策略類定義的演算法。

1、抽象策略角色:通常有乙個介面或乙個抽象類實現

3、環境角色:持有乙個策略類的應用,最終供客戶端呼叫

//乙個打折的例子

//沒有使用策略之前是這樣的

- (float)gettotalprice:(nsstring *)type price:(float)priceelse if ([type isequal: @"7折"]) else if ([type isequal: @"300-50"])

return price;

}//使用了策略之後

//策略基類

@inte***ce dicounnt : nsobject

- (float)discount:(float)price;

@end

@implementation dicounnt

- (float)discount:(float)price

@end

//策略子類1

@inte***ce discountnight : dicounnt

@end

@implementation discountnight

- (float)discount:(float)price

@end

//策略子類2

@inte***ce discountseven : dicounnt

@end

@implementation discountseven

- (float)discount:(float)price

@end

//策略子類3

@inte***ce discountcutthirty : dicounnt

@end

@implementation discountcutthirty

- (float)discount:(float)price

@end

//使用策略的類

@inte***ce price : nsobject

@property (nonatomic, strong) dicounnt *type;

- (float)gettotalprice:(float)price;

@end

@implementation price

- (float)gettotalprice:(float)price

//具體實現

- (void)viewdidload

看了很多文章,包括設計模式的書,沒有說在**選擇策略,只是說給他乙個策略然後去實現。

結論是我還是需要乙個地方判斷需要使用哪個策略,if-else不能避免。

看到網上最合理的解釋:策略模式不是為了避免if-else,而是為了遵循程式的開閉原則。

策略模式不是用來避免if-else的問題,程式中是不可或缺if-else的,我們根據if-else來確定具體應該選擇使用哪種策略,當有新的策略行為時,我們就可以新新增乙個策略實現,這樣就可以避免改動原有的策略**,從而實現程式的擴充套件性,避免改動原有的策略。

所謂開閉原則,也就是說:對擴充套件是開放的,對修改是關閉的。執行程式的擴充套件,但是不允許修改原有的程式策略行為。

可能理解的有偏差,歡迎討論~

iOS設計模式 策略

ios設計模式 策略 1.把解決相同問題的演算法抽象成策略 相同問題指的是輸入引數相同,但根據演算法不同輸出引數會有差異 2.策略被封裝在物件之中 是物件內容的一部分 策略改變的是物件的內容.如果從外部擴充套件了物件的行為,就不叫策略模式,而是裝飾模式.3.策略模式可以簡化複雜的判斷邏輯 if el...

iOS 策略模式

oop中三個原則 封裝 繼承 多型,取經位址 策略模式我理解應該是演算法在源 中就已經配對好了,例如針對多個輸入框內容的判斷,有郵箱的判斷 手機號 姓名 年齡等不同種功能,這樣情況一開始就會對每乙個輸入進行分配他的策略,然後在判斷的時候根據他們自己策略演算法執行。場景一 出遊路線 下拉列表 簡單粗暴...

設計模式 策略設計模式

策略設計模式其實就是多型的使用,父類引用指向子類物件。策略模式的最大特點是使得演算法可以在不影響客戶端的情況下發生變化,從而改變不同的功能。策略模式的缺點其實也很明顯,在於策略模式把每一種具體的策略都封裝成乙個實現類,如果策略有很多的話,很顯然是實現類就會導致過多,顯得臃腫。案列 author de...