设计模式01--简单工厂模式
1、简单工厂模式简述
- 简单工厂模式(FACTORY),通过面向对象的封装,继承和多态来降低程序的耦合度。将一个具体类的实例化交给一个静态工厂方法来执行。
2、简单工厂模式角色划分
- 工厂类:包含了创建具体类的静态方法,负责生产;
- 抽象产品:定义简单工厂中要返回的产品;用
抽象类
表示,由于OC中无抽象类的概念,可以使用协议(Protocol)
来表示; - 具体产品:具体生产的产品。是抽象产品的子类(继承自抽象类),在OC中就是遵守上述
协议(Protocol)
。
3、简单工厂模式类图
4、简单工厂模式示意代码
抽象产品:
YCar
1
2
3@protocol YCar <NSObject>
- (void)run;
@end具体产品:
YAudi
、YBenz
、YLandRover
- .h文件
1
2
3
4
5
6
7
8@interface YAudi : NSObject <YCar>
@end
@interface YBenz : NSObject <YCar>
@end
@interface YLandRover : NSObject <YCar>
@end - .m文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17@implementation YAudi
- (void)run {
NSLog(@"奥迪车跑起来了");
}
@end
@implementation YBenz
- (void)run {
NSLog(@"奔驰车跑起来了");
}
@end
@implementation YLandRover
- (void)run {
NSLog(@"路虎车跑起来了");
}
@end
- .h文件
工厂类:
YCarFactory
- YCarFactory.h
1
+ (id<YCar>)creatCarWithCarType:(YCarType)carType;
- YCarFactory.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17+ (id<YCar>)creatCarWithCarType:(YCarType)carType {
switch (carType) {
case YCarTypeAudi:
return [[YAudi alloc] init];
break;
case YCarTypeBenz:
return [[YBenz alloc] init];
break;
case YCarTypeLandRover:
return [[YLandRover alloc] init];
break;
default:
return nil;
break;
}
}
- YCarFactory.h
Client使用
1
2
3
4id<YCar> car = [YCarFactory creatCarWithCarType:YCarTypeBenz];
[car run];
// 运行结果:奔驰车跑起来了
5、简单工厂模式总结
优点
- 工厂类内部含有创建具体产品的逻辑,外界只需要向工厂类请求所需的产品即可,不需要关心产品实现细节;
缺点
- 工厂类内部集中了创建具体产品的逻辑,假如我们需要新添加一种产品,就要修改工厂类,进行参数判断,
无法使用其子类继承进行扩展
。
- 工厂类内部集中了创建具体产品的逻辑,假如我们需要新添加一种产品,就要修改工厂类,进行参数判断,