一、設(shè)計(jì)模式簡介

1. 引言

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

  • 設(shè)計(jì)模式可以解決什么問題?
    適配器模式:解決Model與View連接關(guān)系,隔斷,解耦

  • 學(xué)習(xí)設(shè)計(jì)模式的必要性
    封裝、繼承、多態(tài)

  • 設(shè)計(jì)模式的基本原則
    開閉原則 對(duì)擴(kuò)展開放、對(duì)修改關(guān)閉。小項(xiàng)目用不到

2. 通過基類的例子來展示設(shè)計(jì)模式的魅力

2.1 開閉原則

#import <UIKit/UIKit.h>

@interface BaseAnimationView : UIView

@property(nonatomic, strong) NSString * title;

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

/**
 *  切換到靜止?fàn)顟B(tài)
 *
 *  @param animation 是否執(zhí)行動(dòng)畫
 *  @param duration  動(dòng)畫持續(xù)時(shí)間
 */
- (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{

}

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

#import "BaseAnimationView.h"

@interface FadeAnimationView : BaseAnimationView

@property(nonatomic, strong) NSAttributedString * attributedString;

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

@end

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

2.2 里氏代換原則

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

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

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

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

@end

2.3 依賴倒轉(zhuǎn)原則

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

#import "FadeAnimationView.h"

@implementation FadeAnimationView

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

}

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

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

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

}

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

}

@end

2.4 接口隔離原則

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

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

2.5 合成/聚合復(fù)用

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

@interface AnimationView : UIView

@property (nonatomic, strong) FadeAnimationView *fadeAnimationView;

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

@end


#import "AnimationView.h"

@implementation AnimationView

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

@end

3. 設(shè)計(jì)模式的類型

  • GOF設(shè)計(jì)模式

    • 創(chuàng)建型模式:通常和對(duì)象的創(chuàng)建有關(guān),涉及到對(duì)象實(shí)例化的方法。(共5種)
    • 結(jié)構(gòu)型模式:描述的是如何組合類和對(duì)象以獲得更大的結(jié)構(gòu)。(共7種)
    • 行為型模式:用來對(duì)類或?qū)ο笤鯓咏换ズ驮鯓臃峙渎氊?zé)進(jìn)行描述。(共11種)
  • 并發(fā)設(shè)計(jì)模式
    處理線程執(zhí)行順序的一系列設(shè)計(jì)模式

  • 框架級(jí)別的設(shè)計(jì)模式
    MVC MVVM

設(shè)計(jì)模式分類

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容