iOS常见的设计模式:工厂设计模式
简单工厂模式:
简单工厂模式(Simple Factory Pattern):专门定义一个类(工厂类)来负责创建其他类的实例。可以根据创建方法的参数来返回不同类的实例,被创建的实例通常都具有共同的父类。
①创建一个工厂类,可乐抽象类。 ②可口可乐和百事可乐继承于可乐抽象类。
// 简单工厂实现
@implementation SimpleFactory
+ (Cola *)createColaWithType:(NSInteger)type
{
switch (type)
{
case 0:
//可口可乐
return [CocaCola new];
case 1:
//百事可乐
return [PesiCola new];
default:
return nil;
break;
}
}
@end
优点:
- 根据约定好的参数就可以获取所需要的对象,而不需要知道其创建的细节。减少了系统的耦合度。
- 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,减少开发者的记忆成本。
缺点: - 如果业务上添加新产品的话,就需要修改工厂类原有的判断逻辑,这其实是违背了开闭原则的。
- 在产品类型较多时,有可能造成工厂逻辑过于复杂。所以简单工厂模式比较适合产品种类比较少而且增多的概率很低的情况。
工厂模式(工厂方法模式)
工厂方法模式(Factory Method Pattern)又称为工厂模式,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,即通过不同的工厂子类来创建不同的产品对象。
与简单工厂的区别: 工厂方法和简单工厂有一些区别,简单工厂是由一个代工厂生产不同的产品,而工厂方法是对工厂进行抽象化,不同产品都由专门的具体工厂来生产。可口可乐工厂专门生产可口可乐,百事可乐工厂专门生产百事可乐。 即:多个工厂对应多个品牌厂商进行一对一生产。
// 工厂抽象类
@implementation Factory
+ (Cola *)createCola
{
return [Cola new];
}
@end
// 可口可乐工厂
@implementation CocaColaFactory
+ (Cola *)createCola
{
return [CocaCola new];
}
@end
// 百事可乐工厂
@implementation
PesiColaFactory
+ (Cola *)createCola
{
return [PesiCola new];
}
@end
优点:
- 根据所需产品找对应工厂进行生产,不关心产品细节,也不需要知道产品类的类名。
- 当系统中加入新产品时,不需要修改抽象工厂和抽象产品提供的接口,也无须修改客户端和其他的具体工厂和具体产品,而只要添加一个具体工厂和与其对应的具体产品就可以了,符合了开闭原则。
缺点: - 当系统中加入新产品时,除了需要提供新的产品类之外,还要提供与其对应的具体工厂类。因此系统中类的个数将成对增加,增加了系统的复杂度。
抽象工厂模式
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
抽象工厂和工厂方法的区别: 生产产品的工厂是抽象的。主题工厂不仅仅生产可口可乐或百事可乐,瓶子和箱子也需要专属定制,专门生产同一主题的不同商品。 优点:
- 不需要生产产品细节,只需要知道产品属于那个工厂就行,当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。这对一些需要根据当前环境来决定其行为的软件系统来说,是一种非常实用的设计模式。
缺点: - 规定了所有可能被创建的产品集合,产品族中扩展新的产品困难,需要修改抽象工厂的接口。
|