国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - 詳解iOS應用的設計模式開發(fā)中Mediator中介者模式的使用

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

2021-01-13 16:30Snow Liang IOS

這篇文章主要介紹了iOS應用的設計模式開發(fā)中Mediator中介者模式的使用,示例代碼為傳統(tǒng)的Objective-C語言,需要的朋友可以參考下

何為中介者模式?

    面向?qū)ο蟮脑O計鼓勵把行為分散到不同對象中,這種分散可能導致對象之間的相互關聯(lián)。在最糟糕的情況下,所有對象都彼此了解并相互操作。

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

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

何時使用中介者模式?

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

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

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

中介者模式的實現(xiàn)示例:
下面先給出類結(jié)構(gòu)圖,再做簡單解釋。

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

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

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

相對來說,缺點也很明顯。由于concretemediator控制了集中化,于是就把交互復雜性變?yōu)榱酥薪檎叩膹碗s性,這就使得中介者會變得比任何一個concretecolleage都復雜。所以一旦concretemediator崩潰,那么整個系統(tǒng)都會受到影響。

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

下面給大家簡單展示一下具體實現(xiàn)。

注意:本文所有代碼均在arc環(huán)境下編譯通過。

mediator類接口

復制代碼 代碼如下:


#import <foundation/foundation.h>

 

@class colleague;
@interface mediator :nsobject
-(void)send:(nsstring*)message
           :(colleague*)colleague;
@end


mediator類實現(xiàn)

復制代碼 代碼如下:


#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類實現(xiàn)

復制代碼 代碼如下:


#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類實現(xiàn)

復制代碼 代碼如下:


#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類實現(xiàn)

復制代碼 代碼如下:


#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類實現(xiàn)

#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方法調(diào)用

復制代碼 代碼如下:


#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;
}


完工!

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 看一级黄色大片 | 欧美一级欧美三级在线观看 | 国产高清视频一区二区 | 91精品久久久久久久久 | 日本一区二区不卡 | 午夜精品久久久 | 成人免费在线观看 | 久草视频国产 | 免费91视频 | 久久综合伊人77777蜜臀 | 国产精品三区在线 | 日韩在线欧美 | 91在线视频观看 | 国产亚洲精品久久久456 | 老熟妇午夜毛片一区二区三区 | 91精品久久久久久 | 国产精品初高中精品久久 | 日韩av一区二区在线观看 | 毛片免费看电影 | 毛片视频网站在线观看 | 99免费在线播放99久久免费 | 成人在线播放 | 91在线精品一区二区 | 在线一二三区 | 国产黄色在线 | 一区二区福利 | 午夜私人影院在线观看 | 特级毛片在线 | 粉嫩欧美一区二区三区高清影视 | 黄色片视频免费 | 国产精品a久久久久 | 久久e久久 | 精品欧美一区二区三区久久久 | 亚洲激情在线 | 亚洲精品中文字幕 | 国产三级黄色毛片 | 欧美高清成人 | 一二三区视频 | 欧美日韩综合精品 | 欧美精品影院 | 久久草在线视频 |