亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

詳解iOS應用的設計模式開發中Mediator中介者模式的使用

2020-07-26 03:23:58
字體:
來源:轉載
供稿:網友

何為中介者模式?

    面向對象的設計鼓勵把行為分散到不同對象中,這種分散可能導致對象之間的相互關聯。在最糟糕的情況下,所有對象都彼此了解并相互操作。

    雖然把行為分散到不同對象增強了可復用性,但是增加的相互關聯又減少了獲得的益處。增加的關聯使得對象很難或不能在不依賴其他對象的情況下工作。應用程序的整體行為可能難以進行任何重大修改,因為行為分布于許多對象。于是結果可能是創建越來越多的子類,以支持應用程序中的任何新行為。

    中介者模式:用一個對象來封裝一系列對象的交互方式。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。

何時使用中介者模式?

1.對象間的交互雖定義明確然而非常復雜,導致一組對象彼此依賴而且難以理解。

2.因為對象引用了許多其他對象并與其通訊,導致對象難以復用。

3.想要定制一個分布在多個類中的邏輯或行為,又不想生成太多的子類。

中介者模式的實現示例:
下面先給出類結構圖,再做簡單解釋。

2016330175627742.jpg (500×365)

中介者模式很容易在系統中引用,但是也比較容易誤用。所以當系統出現了“多對多”交互復雜的對象群時,不要急于使用中介者模式,而要先反思系統在設計上是不是合理。

下面我們來說一說,中介者模式的優缺點。中介者的優點首先是Mediator的出現減少了各個Colleague的耦合,使得可以獨立地改變和復用各個Colleague類和Mediator。其次,由于把對象如何協作進行了抽象,將中介作為一個獨立的概念并將其封裝在一個對象中,這樣關注的對象就從對象各自本身的行為轉移到它們之間的交互上來,也就是站在一個更宏觀的角度去看待系統。

相對來說,缺點也很明顯。由于ConcreteMediator控制了集中化,于是就把交互復雜性變為了中介者的復雜性,這就使得中介者會變得比任何一個ConcreteColleage都復雜。所以一旦ConcreteMediator崩潰,那么整個系統都會受到影響。

還是那句老話,世上沒有銀彈,合適的就是最好的!

下面給大家簡單展示一下具體實現。

注意:本文所有代碼均在ARC環境下編譯通過。

Mediator類接口

復制代碼 代碼如下:

#import <Foundation/Foundation.h>

@class Colleague;
@interface Mediator :NSObject
-(void)Send:(NSString*)message
           :(Colleague*)colleague;
@end


Mediator類實現
復制代碼 代碼如下:

#import "Mediator.h"

@implementation Mediator
-(void)Send:(NSString *)message :(Colleague *)colleague{
    return;
}
@end


Colleague類接口
復制代碼 代碼如下:

#import <Foundation/Foundation.h>

@class Mediator;
@interface Colleague :NSObject{
    Mediator *myMediator;
}
-(Colleague*)MyInit:(Mediator*)mediator;
@end


Colleague類實現
復制代碼 代碼如下:

#import "Colleague.h"

@implementation Colleague
-(Colleague*)MyInit:(Mediator *)mediator{
    if (self == [super init]) {
        myMediator = mediator;
    }
    return self;
}
@end


ConcreteMediator類接口
復制代碼 代碼如下:

#import "Mediator.h"

@class ConcreteColleague1;
@class ConcreteColleague2;
@interface ConcreteMediator :Mediator
@property ConcreteColleague1*colleague1;
@property ConcreteColleague2*colleague2;
@end


ConcreteMediator類實現
復制代碼 代碼如下:

#import "ConcreteMediator.h"
#import "ConcreteColleague1.h"
#import "ConcreteColleague2.h"
#import "Colleague.h"

@implementation ConcreteMediator
@synthesize colleague1;
@synthesize colleague2;

-(void)Send:(NSString *)message :(Colleague *)colleague{
    if ([colleague isKindOfClass:[ConcreteColleague1 class]]) {
        [colleague2 Notify:message];
    }
    else {
        [colleague1 Notify:message];
    }
}
@end


ConcreteColleague1類接口
復制代碼 代碼如下:

#import "Colleague.h"

@class Mediator;
@interface ConcreteColleague1 :Colleague
-(ConcreteColleague1*)MyInit:(Mediator*)mediator;
-(void)Send:(NSString*)message;
-(void)Notify:(NSString*)message;
@end


ConcreteColleague1類實現
復制代碼 代碼如下:

#import "ConcreteColleague1.h"
#import "Mediator.h"

@implementation ConcreteColleague1
-(ConcreteColleague1*)MyInit:(Mediator*)mediator{
    if (self == [super init]) {
        myMediator = mediator;
    }
    return self;
}
-(void)Send:(NSString *)message{
    [myMediator Send:message :self];
}
-(void)Notify:(NSString *)message{
    NSLog(@"ConcreteColleague1 got message:%@", message);
}
@end


ConcreteColleague2類接口
復制代碼 代碼如下:

#import "Colleague.h"

@class Mediator;
@interface ConcreteColleague2 :Colleague
-(ConcreteColleague2*)MyInit:(Mediator*)mediator;
-(void)Send:(NSString*)message;
-(void)Notify:(NSString*)message;
@end
ConcreteColleague2類實現

#import "ConcreteColleague2.h"
#import "Mediator.h"

@implementation ConcreteColleague2
-(ConcreteColleague2*)MyInit:(Mediator*)mediator{
    if (self == [super init]) {
        myMediator = mediator;
    }
    return self;
}
-(void)Send:(NSString *)message{
    [myMediator Send:message :self];
}
-(void)Notify:(NSString *)message{
    NSLog(@"ConcreteColleague2 got message:%@", message);
}
@end


Main方法調用
復制代碼 代碼如下:

#import <Foundation/Foundation.h>
#import "ConcreteMediator.h"
#import "ConcreteColleague1.h"
#import "ConcreteColleague2.h"

int main(int argc,const char * argv[])
{
    @autoreleasepool{
        ConcreteMediator *m = [[ConcreteMediator alloc]init];
        ConcreteColleague1 *c1 = [[ConcreteColleague1 alloc]MyInit:m];
        ConcreteColleague2 *c2 = [[ConcreteColleague2 alloc]MyInit:m];
        [m setColleague1:c1];
        [m setColleague2:c2];
        [c1 Send:@"Good morning"];
        [c2 Send:@"Good afternoon"];
    }
    return 0;
}


完工!   

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97在线视频精品| 欧美激情性做爰免费视频| 国产一区二区三区久久精品| 国产精品亚洲片夜色在线| 在线视频欧美性高潮| 亚洲视频第一页| 精品国偷自产在线| 欧美日韩午夜激情| 亚洲韩国欧洲国产日产av| 精品女厕一区二区三区| 欧美一区二区影院| 热re91久久精品国99热蜜臀| 成人免费看吃奶视频网站| 国产精品嫩草影院久久久| 久久激情五月丁香伊人| 日韩女优在线播放| 亚洲第一av网站| 亚洲成年人在线| 欧美片一区二区三区| 国产一区香蕉久久| 欧美一区二区视频97| 久久精品国产清自在天天线| 欧美日韩加勒比精品一区| 日韩三级成人av网| 亚洲女人初尝黑人巨大| 国内精品久久久久久影视8| 欧美疯狂xxxx大交乱88av| 国产欧美亚洲精品| 66m—66摸成人免费视频| 亚洲成人av资源网| 欧美色欧美亚洲高清在线视频| 中文字幕日韩视频| 久久成人免费视频| 欧美一区视频在线| 一区二区三区久久精品| 91在线精品视频| 亚洲成人激情小说| 国产成人精品电影| 日韩中文在线视频| 亚洲免费小视频| 国产91久久婷婷一区二区| 久久99久久99精品中文字幕| 欧美激情高清视频| 91精品国产高清久久久久久91| 91成人免费观看网站| 91视频免费网站| 国产综合福利在线| 中文字幕亚洲专区| 国产一区二区免费| 97成人精品区在线播放| 成人精品aaaa网站| 亚洲精品日韩欧美| 国产成人91久久精品| 亚洲成av人片在线观看香蕉| 欧美在线观看日本一区| 欧美洲成人男女午夜视频| 久久频这里精品99香蕉| 81精品国产乱码久久久久久| 亚洲人成五月天| 亚洲视频在线视频| 国产成+人+综合+亚洲欧美丁香花| 成人美女免费网站视频| 另类美女黄大片| 一本大道久久加勒比香蕉| 久久久91精品国产| 成人情趣片在线观看免费| 5252色成人免费视频| 色婷婷综合成人av| 日韩一中文字幕| 日韩在线小视频| 国产成人欧美在线观看| 欧美一区二粉嫩精品国产一线天| 国内精品久久久久久久久| 久久国产加勒比精品无码| 国模极品一区二区三区| 亚洲欧美资源在线| 欧美激情一区二区三区高清视频| 国产精品一区二区女厕厕| 琪琪亚洲精品午夜在线| 日韩国产高清污视频在线观看| 在线电影av不卡网址| 中文字幕久久久av一区| 久久艹在线视频| 日韩精品中文字幕在线播放| 91地址最新发布| 欧美精品情趣视频| 国产人妖伪娘一区91| 色综合久久天天综线观看| 欧美激情第6页| 亚洲精品av在线播放| 欧美视频在线观看免费| 国产丝袜一区视频在线观看| 中国人与牲禽动交精品| 欧美片一区二区三区| 日韩av在线免费观看| 中文字幕亚洲欧美一区二区三区| 成人精品久久一区二区三区| 91午夜理伦私人影院| 日韩美女视频在线观看| 久久69精品久久久久久久电影好| 亚洲成在人线av| 97精品久久久| 精品久久久香蕉免费精品视频| 欧美日韩国产在线播放| 国产精品∨欧美精品v日韩精品| 欧美激情第1页| 欧美精品18videos性欧美| 精品一区二区三区电影| 国产精品高潮呻吟久久av黑人| 亚洲欧美国产制服动漫| 国产综合色香蕉精品| 超碰91人人草人人干| 欧美第一淫aaasss性| 国产欧美婷婷中文| 欧美怡红院视频一区二区三区| 久久久久久久一区二区| 97不卡在线视频| 国产日韩欧美电影在线观看| 久久69精品久久久久久久电影好| 一本大道亚洲视频| 国产精品国产自产拍高清av水多| 欧洲中文字幕国产精品| 热久久免费国产视频| 午夜精品久久久久久久99黑人| 日本不卡高字幕在线2019| 91精品国产99久久久久久| 国产精品色视频| 欧美做爰性生交视频| 久久影院中文字幕| 精品国内自产拍在线观看| 中文日韩在线视频| 成人激情视频网| 国产精品专区第二| 亚洲成人av在线播放| 亚洲精品电影在线| 浅井舞香一区二区| 欧美激情一级二级| 国产丝袜一区二区三区免费视频| 欧美激情免费在线| 日韩欧美在线字幕| 久久久精品在线观看| 欧美另类交人妖| 亚洲美女又黄又爽在线观看| 国产97在线播放| 国内伊人久久久久久网站视频| 国产精品视频26uuu| 欧美日产国产成人免费图片| 亚洲激情视频在线| 欧美性猛交xxxx黑人猛交| 国产精品国产福利国产秒拍| 国产精品高潮呻吟久久av野狼| 精品露脸国产偷人在视频| 日韩一二三在线视频播| 欧美亚洲国产成人精品| 欧美日韩国产中文字幕| 久久精视频免费在线久久完整在线看| 美女啪啪无遮挡免费久久网站| 欧美在线一区二区三区四| 插插插亚洲综合网| 国产精品色视频| 欧美日韩国产色视频| 国内免费久久久久久久久久久| 国产精品爽黄69| 最近日韩中文字幕中文|