iOS設(shè)計(jì)模式(三)之抽象工廠模式

設(shè)計(jì)模式系列傳送門

iOS設(shè)計(jì)模式(一)之簡單工廠模式
iOS設(shè)計(jì)模式(二)之工廠模式
iOS設(shè)計(jì)模式(三)之抽象工廠模式


1宾添、概念

什么是抽象工廠船惨?

抽象工廠提供一個(gè)固定的接口,用于創(chuàng)建一系列有關(guān)聯(lián)或相依存的對象缕陕,而不必指定其具體類或其創(chuàng)建的細(xì)節(jié)粱锐。客戶端與從工廠得到的具體對象之間沒有耦合扛邑。

抽象工廠與工廠方法模式的區(qū)別

抽象工廠與工廠方法模式在許多方面有很多相似之處怜浅,以至于我們常常搞不清楚應(yīng)該在什么時(shí)候用哪一個(gè)。兩個(gè)模式都用于相同的目的:創(chuàng)建對象而不讓客戶端知曉返回了什么確切的具體對象。

工廠方法
1.通過類繼承創(chuàng)建抽象產(chǎn)品
2.創(chuàng)建一種產(chǎn)品
3.子類化創(chuàng)建并重寫工廠方法來創(chuàng)建新產(chǎn)品

抽象工廠
1.通過對象組合創(chuàng)建抽象產(chǎn)品
2.創(chuàng)建多個(gè)系列產(chǎn)品
3.必須修改父類的接口才能支持新的產(chǎn)品

工廠模式:每個(gè)抽象產(chǎn)品派生多個(gè)具體產(chǎn)品類恶座,每個(gè)抽象工廠類派生多個(gè)具體工廠類搀暑,每個(gè)具體工廠類負(fù)責(zé)一個(gè)具體產(chǎn)品的實(shí)例創(chuàng)建;
抽象模式:每個(gè)抽象產(chǎn)品派生多個(gè)具體產(chǎn)品類跨琳,每個(gè)抽象工廠派生多個(gè)具體工廠類自点,每個(gè)具體工廠負(fù)責(zé)多個(gè)(一系列)具體產(chǎn)品的實(shí)例創(chuàng)建。

2脉让、結(jié)構(gòu)圖

抽象工廠模式UML圖

3桂敛、代碼

其中FruitProtocol、AppleFruit侠鳄、OrangeFruit和之前的工廠模式代碼一樣
AppleFactory.h

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

NS_ASSUME_NONNULL_BEGIN

@interface AppleFactory : NSObject
+(id<FruitProtocol>)createFactory;
@end

NS_ASSUME_NONNULL_END

AppleFactory.m

#import "AppleFactory.h"
#import "AppleFruit.h"

@implementation AppleFactory
+(id<FruitProtocol>)createFactory{
    AppleFruit *apple = [[AppleFruit alloc] init];
    apple.name = @"蘋果";
    return apple;
}

@end

OrangeFactory.h

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

NS_ASSUME_NONNULL_BEGIN

@interface OrangeFactory : NSObject
+(id<FruitProtocol>)createFactory;
@end

NS_ASSUME_NONNULL_END

OrangeFactory.m

#import "OrangeFactory.h"
#import "OrangeFruit.h"
@implementation OrangeFactory
+(id<FruitProtocol>)createFactory{
    OrangeFruit *orange = [[OrangeFruit alloc] init];
    orange.name = @"橘子";
    return orange;
}

@end

AbstractFactory.h

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

NS_ASSUME_NONNULL_BEGIN

typedef NS_ENUM(NSInteger,FactoryType){
    FactoryTypeApple,
    FactoryTypeOrange,
};

@interface AbstractFactory : NSObject

+(id<FruitProtocol>)initWithType:(FactoryType)type;

@end

NS_ASSUME_NONNULL_END

AbstractFactory.m

#import "AbstractFactory.h"
#import "AppleFactory.h"
#import "OrangeFactory.h"

@implementation AbstractFactory

+(id<FruitProtocol>)initWithType:(FactoryType)type{
    id<FruitProtocol> factory;
    switch (type) {
        case FactoryTypeApple:
            factory = [AppleFactory createFactory];
            break;
        case FactoryTypeOrange:
            factory = [OrangeFactory createFactory];
            break;
            
        default:
            break;
    }
    return factory;
}

@end

在ViewController.m中調(diào)用

#import "ViewController.h"
#import "AbstractFactory.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    id<FruitProtocol> factory = [AbstractFactory initWithType:FactoryTypeApple];
    [factory createProduct];
}

@end

源碼下載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市死宣,隨后出現(xiàn)的幾起案子伟恶,更是在濱河造成了極大的恐慌,老刑警劉巖毅该,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件博秫,死亡現(xiàn)場離奇詭異,居然都是意外死亡眶掌,警方通過查閱死者的電腦和手機(jī)挡育,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來朴爬,“玉大人即寒,你說我怎么就攤上這事≌儇” “怎么了母赵?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長具滴。 經(jīng)常有香客問我凹嘲,道長,這世上最難降的妖魔是什么构韵? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任周蹭,我火速辦了婚禮,結(jié)果婚禮上疲恢,老公的妹妹穿的比我還像新娘凶朗。我一直安慰自己,他們只是感情好显拳,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布俱尼。 她就那樣靜靜地躺著,像睡著了一般萎攒。 火紅的嫁衣襯著肌膚如雪遇八。 梳的紋絲不亂的頭發(fā)上矛绘,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機(jī)與錄音刃永,去河邊找鬼货矮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛斯够,可吹牛的內(nèi)容都是我干的囚玫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼读规,長吁一口氣:“原來是場噩夢啊……” “哼抓督!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起束亏,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤铃在,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后碍遍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體定铜,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年怕敬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了揣炕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡东跪,死狀恐怖畸陡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情虽填,我是刑警寧澤罩锐,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站卤唉,受9級特大地震影響涩惑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜桑驱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一竭恬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧熬的,春花似錦痊硕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春盒揉,著一層夾襖步出監(jiān)牢的瞬間晋被,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工刚盈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留羡洛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓藕漱,卻偏偏與公主長得像欲侮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子肋联,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

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