2017.4.5 策略設計模式

應用背景:

int main(int argc, const char * argv[]) {
    MYStrategyPattern *sp = [MYStrategyPattern new];
    [sp testAction];
    return 0;
}

這是一個普通的函數調用,需要用sp調用testAction方法,而當有一天我業務不滿足的時候,我要么會改這個方法要么是添加新的方法,供sp實例去調用,形成如下狀況:

int main(int argc, const char * argv[]) {
    MYStrategyPattern *sp = [MYStrategyPattern new];
    [sp testAction1];
    [sp testAction2];
    return 0;
}

總之是需要更改MYStrategyPattern這個類中的代碼,但是為了靈活,我能不能達到上述目的而不更改MYStrategyPattern類中代碼呢,就是這個場景 出現了策略 這個設計模式。
具體實現如下:

@protocol Action <NSObject>
- (void)action;
@end

@interface MYStrategyPattern : NSObject
@property (nonatomic, strong) id<Action> action;
- (void)testAction;
@end
@implementation MYStrategyPattern
- (instancetype)init {
    self = [super init];
    if (self) {
        _action = [SpecificAction new];
    }
    return self;
}
- (void)testAction {
    [_action action];
}
@end

@interface SpecificAction : NSObject <Action>
@end
@implementation SpecificAction
- (void)action {
    NSLog(@"具體行為1");
}
@end

@interface SpecificAction1 : NSObject <Action>
@end
@implementation SpecificAction1
- (void)action {
    NSLog(@"具體行為2");
}
@end

int main(int argc, const char * argv[]) {
    MYStrategyPattern *sp = [MYStrategyPattern new];
    [sp testAction];   //具體行為1
    
    SpecificAction1 *a1 = [SpecificAction1 new];
    sp.action = a1;
    [sp testAction];    //具體行為2
    
    SpecificAction *a2 = [SpecificAction new];
    sp.action = a2;
    [sp testAction];  //具體行為1
    return 0;
}

如上,將行為抽象成一個接口,在具體使用的時候找到對應的行為實現類,賦值后再進行調用,這樣我們保證了即使具體策略的更改,卻不會影響MYStrategyPattern類,保證了靈活性,這個就是策略設計模式的好處。
目前對設計模式的理解停留在 這些都是套路,利用這些套路可以在未來 即使業務會發生改變的情況下,盡可能的少改代碼 或者說 對原有的代碼改動小

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

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,993評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,595評論 25 708
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,779評論 18 399
  • 工廠模式類似于現實生活中的工廠可以產生大量相似的商品,去做同樣的事情,實現同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 7,854評論 2 17
  • 起重機通過起升和移動所吊運的物品完成搬運作業,為適應起重機不同的使用情況和工作要求,在設計和選用起重機及其零部件時...
    起重工廠店閱讀 829評論 0 0