抽象工厂提供一个固定的接口,用于创建一系列有关联或相依存的对象,而不必指定其具体类或其创建的细节,客户端与从工厂得到的具体对象之间没有耦合。
抽象工厂和工厂方法模式存在许多方面都非常相似,很多人常常搞不清应该在什么时候用哪一个,两个模式都具有相同的目的,创建对象而不让客户端知晓返回了什么确切的具体对象,两者不同
抽象工厂 工厂方法
通过对象组合创建抽象产品通过类继承创建抽象产品
创建多系列产品 创建单一产品
必须修改父类的接口才能支持新的产品子类化创建者并重载工厂方法以创建
软件设计的黄金法则:变动需要抽象
如果有多个类共有相同的行为,但实际实现不同,则可能需要某种抽象类型作为其父类被继承,抽象类型定义所有相关具体类将共有的共同行为。
类簇是基础框架中一种常见的设计模式,基于抽象工厂模式细想,它将若干相关的私有具体工厂集合到一个共有抽象超类之下,比如nsnumber 的子类都包含了数这个集合,都是数的字集,创建抽象产品的工厂方法与创建抽象工厂的工厂方法之间有个不同点。显然,像intValue和boolValue这样的工厂方法,应在具体工厂(NSCFNumber和NSCFBoolean)中重载返回实际产品,其它像NumberWithBool 和 numberwithInt这样的工厂方法并不是为了返回产品,而是为了分返回能返回的产品工厂,因此它们不应载具体工厂子类中重载。
其它实现类簇的还有NSData,NSArray,NSDictionary和NSString。