iOS | 简单工厂

作者: 无夜之星辰 | 来源:发表于2018-09-12 18:24 被阅读43次

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。 —— 百度百科

图片来自百度百科

举例说明:

比如说,有一个汽车工厂,能生产Benz和BMW两种car。用简单工厂来实现:

  • 首先,要有一个工厂:
工厂类
#import <Foundation/Foundation.h>
#import "CQCar.h"

typedef NS_ENUM(NSUInteger, CQCarType) {
    /** 奔驰 */
    CQCarTypeBenz,
    /** 宝马 */
    CQCarTypeBMW
};

@interface CQCarFactory : NSObject


/**
 根据type生产对应类型的car

 @param type car的type
 @return 具体的car实例
 */
+ (CQCar *)produceCarWithType:(CQCarType)type;

@end
  • 工厂根据传入的type生产Benz和BMW两种car(都继承自car):
car及其子类
@implementation CQCarFactory

/**
 根据type生产对应类型的car
 
 @param type car的type
 @return 具体的car实例
 */
+ (CQCar *)produceCarWithType:(CQCarType)type {
    switch (type) {
        case CQCarTypeBenz: // 奔驰
        {
            CQCarBenz *benz = [[CQCarBenz alloc] init];
            return benz;
        }
            break;
            
        case CQCarTypeBMW: // 宝马
        {
            CQCarBMW *bmw = [[CQCarBMW alloc] init];
            return bmw;
        }
            break;
            
        default: // 一般的(比如说奥拓🙃)
        {
            CQCar *car = [[CQCar alloc] init];
            return car;
        }
            break;
    }
}

@end
  • 工厂的使用:
// 要生产的car的类型
NSArray *typeArray = @[@(CQCarTypeBenz), @(CQCarTypeBMW), @(CQCarTypeBenz)];

for (int i = 0; i < typeArray.count; i++) {
    CQCarType carType = [typeArray[i] integerValue];
    // 传入type,创建car
    CQCar *car = [CQCarFactory produceCarWithType:carType];
    // 打印car的信息
    [car printInfo];
}
控制台信息

总结一下简单工厂:

封装一个工厂类(CarFactory),这个类可以根据传入的参数(CarType)创建出对应的实例(Benz和BMW),并且这些实例的父类相同(都属于car)。

简单工厂就是这么简单。

注:简单工厂不属于23种GOF设计模式之一。

demo

https://github.com/CaiWanFeng/iOS_Storage

此demo位置:

相关文章

  • 工厂模式——IOS版

    一、前言 工厂模式种类:简单工厂、工厂方法、抽象工厂 IOS中的应用:类簇 二、简单工厂 介绍:简单工厂模式是属于...

  • 2016.06笔记

    iOS设计模式之工厂模式(简单工厂,工厂方法,抽象工厂) 简单工厂:简单工厂模式的工厂类一般是使用静态方法,通过接...

  • iOS设计模式(3)适配器模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(4)抽象工...

  • iOS设计模式(三)之抽象工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(一)之简单工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(二)之工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(5)策略模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(6)模板模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(7)建造者模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(4)抽象工厂模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

网友评论

    本文标题:iOS | 简单工厂

    本文链接:https://www.haomeiwen.com/subject/cfivgftx.html