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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,991评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,655评论 19 139
  • 1 场景问题# 1.1 导出数据的应用框架## 考虑这样一个实际应用:实现一个导出数据的应用框架,来让客户选择数据...
    七寸知架构阅读 11,773评论 6 75
  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 9,386评论 1 15
  • 海风轻轻拂过你的头发,看你就像雾里看花,越来越美,越来越香 自从你闯入我的生活,我再也没有感觉到孤独寂寞,自从你闯...
    求婚总动员阅读 1,677评论 0 0