简单工厂模式(Factory Pattern)是 开发中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在简单工厂模式中,我们在创建对象时不会暴露创建逻辑,并且是通过使用一个共同的方法来指向新创建的对象,定义一个创建对象的方法,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
1.创建一个Person
类,并在Person类的.h文件中,声明两个方法
/**
* 创建一个人物
*
* @param type 人物的类型
*/
+ (Person *)personWithType:(PersonType)type;
/**
* 做一些事情
*/
- (void)doSomeThing;
PersonType是一个枚举,代表着Person的类别
typedef NS_ENUM(NSUInteger, PersonType) {
PersonTypeMajor = 1, /**< 成年人 */
PersonTypeYoungster, /**< 青少年 */
PersonTypeKid /**< 小孩 */
};
然后在.m文件中实现在.h文件的两个方法
+ (Person *)personWithType:(PersonType)type {
switch (type) {
case PersonTypeMajor:
return [[Major alloc] init];
break;
case PersonTypeYoungster:
return [[Youngster alloc] init];
break;
case PersonTypeKid:
return [[Kid alloc] init];
break;
}
}
- (void)doSomeThing {
}
根据传入的type类型,创建相对应的子类型
2.接下来创建三个Person的子类 Major 、Youngster、Kid,并且在这三个子类的实现文件中,重写父类doSomething的方法(因为继承的关系,三个子类都有同样的方法)
#import "Major.h"
@implementation Major
- (void)doSomeThing {
NSLog(@"成年人");
}
@end
#import "Youngster.h"
@implementation Youngster
- (void)doSomeThing {
NSLog(@"青少年");
}
@end
#import "Kid.h"
@implementation Kid
- (void)doSomeThing {
NSLog(@"小孩");
}
@end
3.创建Person类根据不同的类型去创建实例对象
Person *major = [Person personWithType:PersonTypeMajor];
[major doSomeThing];
Person *youngster = [Person personWithType:PersonTypeYoungster];
[youngster doSomeThing];
Person *kid = [Person personWithType:PersonTypeKid];
[kid doSomeThing];
得到的结果
Paste_Image.png这样,通过一个工厂模式的工厂方法去创建了一个类族,只需要利用Person根据类型去创建一个实例对象,然后执行相应的操作,不同的类型得到不一样的结果。(有不对的地方,欢迎指出)
网友评论