簡單工廠模式(Factory Pattern)是 開發(fā)中最常用的設(shè)計模式之一抛计。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式关贵。
在簡單工廠模式中扯饶,我們在創(chuàng)建對象時不會暴露創(chuàng)建邏輯,并且是通過使用一個共同的方法來指向新創(chuàng)建的對象棉浸,定義一個創(chuàng)建對象的方法怀薛,讓其子類自己決定實例化哪一個工廠類,工廠模式使其創(chuàng)建過程延遲到子類進(jìn)行迷郑。
1.創(chuàng)建一個Person
類枝恋,并在Person類的.h文件中迂苛,聲明兩個方法
/**
* 創(chuàng)建一個人物
*
* @param type 人物的類型
*/
+ (Person *)personWithType:(PersonType)type;
/**
* 做一些事情
*/
- (void)doSomeThing;
PersonType是一個枚舉,代表著Person的類別
typedef NS_ENUM(NSUInteger, PersonType) {
PersonTypeMajor = 1, /**< 成年人 */
PersonTypeYoungster, /**< 青少年 */
PersonTypeKid /**< 小孩 */
};
然后在.m文件中實現(xiàn)在.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 {
}
根據(jù)傳入的type類型鼓择,創(chuàng)建相對應(yīng)的子類型
2.接下來創(chuàng)建三個Person的子類 Major 三幻、Youngster、Kid呐能,并且在這三個子類的實現(xiàn)文件中念搬,重寫父類doSomething的方法(因為繼承的關(guān)系,三個子類都有同樣的方法)
#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.創(chuàng)建Person類根據(jù)不同的類型去創(chuàng)建實例對象
Person *major = [Person personWithType:PersonTypeMajor];
[major doSomeThing];
Person *youngster = [Person personWithType:PersonTypeYoungster];
[youngster doSomeThing];
Person *kid = [Person personWithType:PersonTypeKid];
[kid doSomeThing];
得到的結(jié)果
這樣摆出,通過一個工廠模式的工廠方法去創(chuàng)建了一個類族朗徊,只需要利用Person根據(jù)類型去創(chuàng)建一個實例對象,然后執(zhí)行相應(yīng)的操作偎漫,不同的類型得到不一樣的結(jié)果爷恳。(有不對的地方,歡迎指出)