23種設(shè)計(jì)模式(十)

版本記錄

版本號(hào) 時(shí)間
V1.0 2017.04.29

前言

前面講了23種設(shè)計(jì)模式中的前幾個(gè),下面我們繼續(xù)笑诅,先看前幾篇文章平委。
1. 23種設(shè)計(jì)模式(一)
2. 23種設(shè)計(jì)模式(二)
3. 23種設(shè)計(jì)模式(三)
4. 23種設(shè)計(jì)模式(四)
5. 23種設(shè)計(jì)模式(五)
6. 23種設(shè)計(jì)模式(六)
7. 23種設(shè)計(jì)模式(七)
8. 23種設(shè)計(jì)模式(八)
9. 23種設(shè)計(jì)模式(九)

詳述

十九间唉、職責(zé)鏈模式——Chain of Responsibility

使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免請(qǐng)求的發(fā)送者和接受者之間的耦合關(guān)系唱蒸,將這個(gè)對(duì)象連成一條鏈傳遞該請(qǐng)求,直到有一個(gè)對(duì)象處理它為止烛愧。先看一下原理圖油宜。

職責(zé)鏈模式原理圖

看代碼組織結(jié)構(gòu)。

代碼組織結(jié)構(gòu)

看代碼怜姿。

1. ViewController.m

#import "ViewController.h"
#import "HCDMnager.h"
#import "HCDCommonManager.h"
#import "HCDMajorManager.h"
#import "HCDGenaralManager.h"
#import "HCDReuquest.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    HCDCommonManager *common = [[HCDCommonManager alloc]initWithName:@"豬經(jīng)理"];
    HCDMajorManager *majon = [[HCDMajorManager alloc]initWithName:@"狗總監(jiān)"];
    HCDGenaralManager *genaral = [[HCDGenaralManager alloc]initWithName:@"蛤蟆總經(jīng)理"];
    common.superior = majon;
    majon.superior = genaral;
    
    HCDReuquest *request = [[HCDReuquest alloc]init];
    request.requestType = @"請(qǐng)假";
    request.number = 5;
    [common dealRequest:request];
    
    request.number = 20;
    [common dealRequest:request];
    
    request.number = 220;
    [common dealRequest:request];
    
    request.number = 1200;
    [common dealRequest:request];
}

@end

2. HCDMnager.h
#import <Foundation/Foundation.h>

@class HCDMnager,HCDReuquest;

@interface HCDMnager : NSObject

@property (nonatomic, copy) NSString *name;

@property (nonatomic, strong) HCDMnager *superior;

- (instancetype)initWithName:(NSString *)name;

- (void)dealRequest:(HCDReuquest *)request;

@end


3. HCDMnager.m
#import "HCDMnager.h"
#import "HCDReuquest.h"

@implementation HCDMnager

- (instancetype)initWithName:(NSString *)name
{
    self = [super init];
    if (self) {
        _name = name;
    }
    return self;
}

- (void)dealRequest:(HCDReuquest *)request
{
    
}

@end

4. HCDReuquest.h

#import <Foundation/Foundation.h>

@interface HCDReuquest : NSObject

@property (nonatomic, copy) NSString *requestType;
@property (nonatomic, assign) NSInteger number;

@end

5. HCDReuquest.m
#import "HCDReuquest.h"

@implementation HCDReuquest

@end


6. HCDCommonManager.h

#import "HCDMnager.h"

@interface HCDCommonManager : HCDMnager

@end


7. HCDCommonManager.m

#import "HCDCommonManager.h"
#import "HCDReuquest.h"

@implementation HCDCommonManager

- (void)dealRequest:(HCDReuquest *)request
{
    if ([request.requestType isEqualToString:@"請(qǐng)假"] && request.number < 10) {
        NSLog(@"%@處理了%@,時(shí)間是%ld",self.name,request.requestType,request.number);
    }
    else{
        [self.superior dealRequest:request];
    }
}

@end


8. HCDMajorManager.h

#import "HCDMnager.h"

@interface HCDMajorManager : HCDMnager

@end


9. HCDMajorManager.m
#import "HCDMajorManager.h"
#import "HCDReuquest.h"

@implementation HCDMajorManager

- (void)dealRequest:(HCDReuquest *)request
{
    if ([request.requestType isEqualToString:@"請(qǐng)假"] && request.number < 50) {
        NSLog(@"%@處理了%@,時(shí)間是%ld",self.name,request.requestType,request.number);
    }
    else{
        [self.superior dealRequest:request];
    }
}

@end


10. HCDGenaralManager.h

#import "HCDMnager.h"

@interface HCDGenaralManager : HCDMnager

@end


11. HCDGenaralManager.m
#import "HCDGenaralManager.h"
#import "HCDReuquest.h"

@implementation HCDGenaralManager

- (void)dealRequest:(HCDReuquest *)request
{
    if ([request.requestType isEqualToString:@"請(qǐng)假"] && request.number < 500) {
        NSLog(@"%@處理了%@,時(shí)間是%ld",self.name,request.requestType,request.number);
    }
    else{
        NSLog(@"%@不同意%@,時(shí)間是%ld",self.name,request.requestType,request.number);
    }
}

@end

看結(jié)果慎冤。

2017-04-29 10:58:55.169 19職責(zé)鏈模式[1184:25440] 豬經(jīng)理處理了請(qǐng)假,時(shí)間是5
2017-04-29 10:58:55.170 19職責(zé)鏈模式[1184:25440] 狗總監(jiān)處理了請(qǐng)假,時(shí)間是20
2017-04-29 10:58:55.170 19職責(zé)鏈模式[1184:25440] 蛤蟆總經(jīng)理處理了請(qǐng)假,時(shí)間是220
2017-04-29 10:58:55.170 19職責(zé)鏈模式[1184:25440] 蛤蟆總經(jīng)理不同意請(qǐng)假,時(shí)間是1200

結(jié)論:思想。


二十沧卢、中介者模式——Mediator

??用一個(gè)中介對(duì)象來(lái)封裝一系列的對(duì)象交互蚁堤,中介者使各個(gè)對(duì)象不需要顯式地相互引用,從而使其耦合松散但狭,而且可以獨(dú)立地改變它們之間的交互披诗。先看一下原理示例圖。

中介者模式示例圖

下面看一下代碼結(jié)構(gòu)圖立磁。

中介者模式代碼組織結(jié)構(gòu)

下面看代碼呈队。

1. ViewController.m

#import "ViewController.h"
#import "HCDColleagueA.h"
#import "HCDColleagueB.h"
#import "HCDAbstractMediator.h"
#import "HCDMediator.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    HCDAbstractColleague *colleagueA = [[HCDColleagueA alloc]init];
    HCDAbstractColleague *colleagueB = [[HCDColleagueB alloc]init];
    
    HCDAbstractMediator *mediator = [[HCDMediator alloc]initWithColleagueA:colleagueA colleagueB:colleagueB];
    colleagueA.mediator = mediator;
    colleagueB.mediator = mediator;
    
    colleagueA.number = 1450;
    colleagueB.number = 1450;
    [colleagueA notice];
    NSLog(@"%f---%f",colleagueA.number,colleagueB.number);
    colleagueB.number = 123;
    [colleagueB notice];
    NSLog(@"%f---%f",colleagueA.number,colleagueB.number);
}

@end



2. HCDAbstractColleague.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@class HCDAbstractMediator;

@interface HCDAbstractColleague : NSObject

@property (nonatomic, assign) CGFloat number;

- (void)notice;

@property(nonatomic,strong) HCDAbstractMediator *mediator;

@end

3. HCDAbstractColleague.m

#import "HCDAbstractColleague.h"
#import "HCDAbstractMediator.h"

@implementation HCDAbstractColleague

@end

4. HCDMediator.h

#import <Foundation/Foundation.h>
#import "HCDAbstractMediator.h"

@interface HCDMediator : HCDAbstractMediator

@end


5. HCDMediator.m

#import "HCDMediator.h"

@implementation HCDMediator

@synthesize colleagueB = _colleagueB;
@synthesize colleagueA = _colleagueA;

- (instancetype)initWithColleagueA:(HCDAbstractColleague *)colleagueA colleagueB:(HCDAbstractColleague *)colleagueB
{
    self = [super init];
    if (self) {
        _colleagueA = colleagueA;
        _colleagueB = colleagueB;
    }
    return self;
}

- (void)setValueToColleagueA:(CGFloat)value
{
    self.colleagueA.number = value * 100;
}

- (void)setValueToColleagueB:(CGFloat)value
{
    self.colleagueB.number = value * 0.01;
}

@end

6. HCDColleagueA.h

#import "HCDAbstractColleague.h"

@interface HCDColleagueA : HCDAbstractColleague

@end


7. HCDColleagueA.m

#import "HCDColleagueA.h"
#import "HCDAbstractMediator.h"

@implementation HCDColleagueA

- (void)notice
{
    [self.mediator setValueToColleagueB:self.number];
}

@end


8. HCDColleagueB.h

#import "HCDAbstractColleague.h"

@interface HCDColleagueB : HCDAbstractColleague

@end


9. HCDColleagueB.m

#import "HCDColleagueB.h"
#import "HCDAbstractMediator.h"

@implementation HCDColleagueB

- (void)notice
{
    [self.mediator setValueToColleagueA:self.number];
}

@end


10. HCDAbstractMediator.h

#import <Foundation/Foundation.h>
#import "HCDColleagueB.h"
#import "HCDColleagueA.h"

@interface HCDAbstractMediator : NSObject

- (instancetype)initWithColleagueA:(HCDAbstractColleague *)colleagueA colleagueB:(HCDAbstractColleague *)colleagueB;

@property (nonatomic, weak) HCDAbstractColleague *colleagueA;
@property (nonatomic, weak) HCDAbstractColleague *colleagueB;

- (void)setValueToColleagueA:(CGFloat)value;
- (void)setValueToColleagueB:(CGFloat)value;

@end


11. HCDAbstractMediator.m
#import "HCDAbstractMediator.h"

@implementation HCDAbstractMediator

@end

看結(jié)果。

2017-04-29 11:23:14.332 20中介者模式[1615:39216] 1450.000000---14.500000
2017-04-29 11:23:14.333 20中介者模式[1615:39216] 12300.000000---123.000000

結(jié)論:思想唱歧。

后記

??今天是五一放假的第一天宪摧,起來(lái)的有點(diǎn)晚,大約十點(diǎn)多才起床颅崩,起來(lái)了以后才想起來(lái)有一篇還沒(méi)寫几于,就接著寫了,下午再寫一篇沿后,給23種設(shè)計(jì)模式一個(gè)了結(jié)沿彭,再次謝謝大家。

大海美圖
?
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尖滚,一起剝皮案震驚了整個(gè)濱河市喉刘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌漆弄,老刑警劉巖饱搏,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異置逻,居然都是意外死亡推沸,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鬓催,“玉大人肺素,你說(shuō)我怎么就攤上這事∮罴荩” “怎么了倍靡?”我有些...
    開(kāi)封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)课舍。 經(jīng)常有香客問(wèn)我塌西,道長(zhǎng),這世上最難降的妖魔是什么筝尾? 我笑而不...
    開(kāi)封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任捡需,我火速辦了婚禮,結(jié)果婚禮上筹淫,老公的妹妹穿的比我還像新娘站辉。我一直安慰自己,他們只是感情好损姜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布饰剥。 她就那樣靜靜地躺著,像睡著了一般摧阅。 火紅的嫁衣襯著肌膚如雪汰蓉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天棒卷,我揣著相機(jī)與錄音顾孽,去河邊找鬼。 笑死娇跟,一個(gè)胖子當(dāng)著我的面吹牛岩齿,可吹牛的內(nèi)容都是我干的太颤。 我是一名探鬼主播苞俘,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼龄章!你這毒婦竟也來(lái)了吃谣?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤做裙,失蹤者是張志新(化名)和其女友劉穎岗憋,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體锚贱,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仔戈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片监徘。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晋修,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凰盔,到底是詐尸還是另有隱情墓卦,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布户敬,位于F島的核電站落剪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏尿庐。R本人自食惡果不足惜忠怖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屁倔。 院中可真熱鬧脑又,春花似錦、人聲如沸锐借。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)钞翔。三九已至严卖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間布轿,已是汗流浹背哮笆。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留汰扭,地道東北人稠肘。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像萝毛,于是被迫代替她去往敵國(guó)和親项阴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容