工廠模式

  • 在基類中定義創(chuàng)建對(duì)象的一個(gè)接口,讓子類決定實(shí)例化哪個(gè)類。工廠方法讓一個(gè)類的實(shí)例化延遲到子類中進(jìn)行。
  • 工廠方法要解決的問(wèn)題是對(duì)象的創(chuàng)建時(shí)機(jī),它提供了一種擴(kuò)展的策略,很好地符合了開放封閉原則。工廠方法也叫做虛構(gòu)造器(Virtual Constructor)

什么時(shí)候使用工廠方法?

在這種情況:一個(gè)父類無(wú)法預(yù)期生成那個(gè)子類的對(duì)象,想讓其子類來(lái)指定生成的對(duì)象的時(shí)候。

eg:

建一個(gè)繼承于NSObject的“工廠”
#FactoryAnimal.h


+ (Animal *)creatAnimalWithType:(NSString *)type;

#FactoryAnimal.m
+ (Animal *)creatAnimalWithType:(NSString *)type{
    
    Animal *animal = [[NSClassFromString(type) alloc]init];
//[NSClassFromString根據(jù)字符串生成類。Animal *animal=,父類指針指向子類對(duì)象,OC的多態(tài)。
    [animal laungh];
    
    return animal;
}

新建一個(gè)叫Animal的,繼承于NSObject的類
它有一個(gè)方法:笑??
- (void)laungh;
但是在.m中并不寫實(shí)現(xiàn)
- (void)laungh{
}


新建繼承于Animal的類,cat、dog
由于OC繼承特性
在cat、dog類.m中實(shí)現(xiàn) (void)laungh;
cat
- (void)laungh{
    
    NSLog(@"喵喵");
}

dog
- (void)laungh{
    
    NSLog(@"汪汪");
}

接下來(lái)這樣調(diào)用

[FactoryAnimal creatAnimalWithType:@"dog"];
[FactoryAnimal creatAnimalWithType:@"cat"];

打印結(jié)果

屏幕快照 2016-07-01 下午10.08.10.png

可以看到,給那個(gè)類名,就調(diào)用那個(gè)方法。有時(shí)候需根據(jù)不同的Model產(chǎn)出不同的cell的時(shí)候,就可以使用工廠模式。

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

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

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