-
在基類中定義創(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