学学人家的框架站在巨人肩上学习iOS Developer

iOS设计模式——简单工厂模式的使用

2016-11-14  本文已影响554人  CoderGuogt

简单工厂模式(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根据类型去创建一个实例对象,然后执行相应的操作,不同的类型得到不一样的结果。(有不对的地方,欢迎指出)

上一篇 下一篇

猜你喜欢

热点阅读