一、設計模式簡介

1. 引言

  • 為什么會抽象出設計模式?
    設計模式是在眾多人開發(fā)大型項目遇到問題,為了解決特定問題而抽象出來的解決方案。

  • 設計模式可以解決什么問題?
    適配器模式:解決Model與View連接關系,隔斷,解耦

  • 學習設計模式的必要性
    封裝、繼承、多態(tài)

  • 設計模式的基本原則
    開閉原則 對擴展開放、對修改關閉。小項目用不到

2. 通過基類的例子來展示設計模式的魅力

2.1 開閉原則

#import <UIKit/UIKit.h>

@interface BaseAnimationView : UIView

@property(nonatomic, strong) NSString * title;

/**
 *  切換到正常狀態(tài)
 *
 *  @param animation 是否執(zhí)行動畫
 *  @param duration  動畫持續(xù)時間
 */
- (void)changeToNormalStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration;

/**
 *  切換到靜止狀態(tài)
 *
 *  @param animation 是否執(zhí)行動畫
 *  @param duration  動畫持續(xù)時間
 */
- (void)changeToDisableStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration;

@end


#import "BaseAnimationView.h"

@implementation BaseAnimationView

- (void)changeToNormalStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration{

}

- (void)changeToDisableStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration{

}

我們想要對上面這個類進行修改,就要再寫一個類繼承自以上的類,創(chuàng)建新的方法

#import "BaseAnimationView.h"

@interface FadeAnimationView : BaseAnimationView

@property(nonatomic, strong) NSAttributedString * attributedString;

/**
 *  切換到高亮狀態(tài)
 *
 *  @param animation 是否執(zhí)行動畫
 *  @param duration  動畫持續(xù)時間
 */
- (void)changeToHighLightStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration;

@end

這樣做就體現(xiàn)了開閉原則,代碼只允許擴展,不允許修改,以免出現(xiàn)不必要的錯誤。

2.2 里氏代換原則

子類可以用父類所有的方法 父類也可以使用子類的所有方法

#import "ViewController.h"
#import "BaseAnimationView.h"
#import "FadeAnimationView.h"
#import "ScaleAnimationView.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // 父類調用子類初始化,實現(xiàn)了里氏代換原則
    BaseAnimationView *baseAnimationView = [[ScaleAnimationView alloc] init];
    [baseAnimationView changeToNormalStateAnimation:YES duration:2.f];
}

@end

2.3 依賴倒轉原則

抽象不依賴于細節(jié) 細節(jié)依賴于抽象, 這個指的是私有方法不應該暴露在外界,盡量要做到抽象的方法用具體的實現(xiàn)來實現(xiàn),而不暴露在外界。

#import "FadeAnimationView.h"

@implementation FadeAnimationView

// 私有方法
- (void)fadeAnimation: (BOOL)animation
{

}

- (void)changeToNormalStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration{

    // 調用私有方法,但在.h文件中不暴露該方法
    [self fadeAnimation:YES];
}

- (void)changeToDisableStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration{

}

- (void)changeToHighLightStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration{

}

@end

2.4 接口隔離原則

盡量保證接口必要性原則,不要讓接口做一些八竿子打不著的事情

/**
 *  切換到出錯狀態(tài)
 *
 *  @param animation 是否執(zhí)行動畫
 *  @param duration  動畫持續(xù)時間
 */
- (void)changeToErrorStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration;

2.5 合成/聚合復用

#import <UIKit/UIKit.h>
#import "FadeAnimationView.h"

@interface AnimationView : UIView

@property (nonatomic, strong) FadeAnimationView *fadeAnimationView;

/**
 *  切換到出錯狀態(tài)
 *
 *  @param animation 是否執(zhí)行動畫
 *  @param duration  動畫持續(xù)時間
 */
- (void)changeToErrorStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration;

@end


#import "AnimationView.h"

@implementation AnimationView

- (void)changeToErrorStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration{
    // 實現(xiàn)想要修改的代碼
}

@end

3. 設計模式的類型

  • GOF設計模式

    • 創(chuàng)建型模式:通常和對象的創(chuàng)建有關,涉及到對象實例化的方法。(共5種)
    • 結構型模式:描述的是如何組合類和對象以獲得更大的結構。(共7種)
    • 行為型模式:用來對類或對象怎樣交互和怎樣分配職責進行描述。(共11種)
  • 并發(fā)設計模式
    處理線程執(zhí)行順序的一系列設計模式

  • 框架級別的設計模式
    MVC MVVM

設計模式分類

參考書籍:Objective-C編程之道 iOS設計模式解析
參考鏈接:http://www.runoob.com/design-pattern

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

推薦閱讀更多精彩內容