抽象工厂
抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
抽象工厂的使用场景
抽象工厂的使用场景与工厂方法的使用场景类似,参照iOS设计模式-工厂方法
抽象工厂在CocoaTouch中的应用
NSNumber实例的方式完全符合抽象工厂模式,具体参照iOS设计模式-工厂方法
抽象工厂方法在Objective-C中的实现
1、创建抽象工厂父类,并提供抽象工厂接口。
//BrandingFactory.h
@interface BrandingFactory : NSObject{
}
+ (BrandingFactory*)factory;
- (UIView*)brandedView;
//BrandingFactory.m
+ (BrandingFactory*)factory{
//根据不同条件返回不同的工厂对象
#if defined (USE_ACME)
return [[AcmeBrandingFactory alloc] init];
#elif defined (USE_SIERRA)
return [[SierraBrandingFactory alloc] init];
#else
return nil;
#endif
}
- (UIView*)brandedView{
return nil;
}
2、创建各个具体的工厂类重写除工厂方法以外的其他方法(即重写brandedView方法,不需要重写factory方法)
3、调用
BrandingFactory *factory = [BrandingFactory factory];
UIView *view = [factory brandedView];
工厂方法与抽象工厂的对比
工厂方法 | 抽象工厂 |
通过类继承创建抽象产品 | 通过对象组合创建抽象产品 |
创建一种产品 | 创建多系列产品 |
子类化创建者并重载工厂方法以及创建新产品 | 必须修改父类的接口才能支持新的产品 |