设计模式-简单工厂模式

简单工厂模式(Simple Factory Pattern), 又称静态工厂方法(Static Factory Method); 专门定义一个类来负责创建其他类的实例.可根据创建方法的参数来返回不同类的实例,被创建的实例通常都具有共同的父类.

角色:

  • Factory:工厂角色, 负责实现创建产品的所有细节
  • Product:抽象产品角色, 负责定义外部访问产品接口
  • ConcreteProduct:具体产品角色, 负责封装具体的产品细节

示例: 简单工厂模式中的工厂类,可比做为富士康,它可以加工不同品牌的手机,加工厂根据加工的类型产出相应的手机,比如苹果手机&小米手机等

1
2
3
4
5
6
7
8
9
10
11
// Phone抽象类
@interface Phone : NSObject
@end

// iPhone产品类
@interface iPhone : Phone
@end

// miPhone产品类
@interface miPhone : Phone
@end

富士康的实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@interface PhoneFactory : NSObject
- (Phone *)createPhoneWithType:(NSInteger)type
@end

@implementation PhoneFactory

- (Phone *)createPhoneWithType:(NSInteger)type
{
switch (type) {
case 0:
{
return [iPhone new];
}
case 1:
{
return [miPhone new];
}
default:
return nil;
break;
}
}
@end

外界使用

1
Phone *phone = [PhoneFactory createPhoneWithType:0];

对应的类图如下:

优点:

  • 屏蔽创建细节, 减少系统耦合

缺点:

  • 新添产品类型,需要修改工厂类, 不符合开闭原则.
  • 产品类型繁多时,不便维护

总结:
简单工厂模式适合产品种类比较少,并且未来增多的概率比较低的情况