您好,欢迎来到伴沃教育。
搜索
您的当前位置:首页iOS设计模式解析笔记 (Day3) -- 工厂方法

iOS设计模式解析笔记 (Day3) -- 工厂方法

来源:伴沃教育
小猫咪.jpg

何为工厂方法模式

****工厂方法模式****:定义创建对象的接口, 让子类决定实例化哪一个类. 工厂方法的实例化延迟到其子类.

何时使用工厂方法

  • 编译时无法准确预期要创建的对象的类.
  • 类想让其子类决定在运行时创建什么.
  • 类有若干辅助类为其子类, 而你决定想返回哪个子类.

使用工行方法的好处

与直接创建新的具体对象相比, 使用工厂方法创建对象更加安全. 工厂方法模式, 可以要求有工厂方法创建的对象拥有一组共同的行为. 所以往类层次结构中引入新的具体产品并不需要修改客户端代码, 因为返回的任何具体对象的接口都跟客户端一直在用的从前的接口相同.

简单的使用

定义一个机械工厂类 MachineryFactory

#import <Foundation/Foundation.h>

@interface MachineryFactory : NSObject

+ (instancetype)factory;

- (NSObject *)bmwCar;
- (NSObject *)audiCar;
- (NSObject *)benzCar;

@end

#import "MachineryFactory.h"
#import "CarFactory.h" 

@implementation MachineryFactory

+ (instancetype)factory {
    
    return [[[self class]alloc] init];
}

- (NSObject *)bmwCar {
    return nil;
}

- (NSObject *)benzCar {
    return nil;
}

- (NSObject *)audiCar {
    return nil;
}

定义一个汽车工厂类继承于机械工厂类 CarFactory

#import "MachineryFactory.h"

@interface CarFactory : MachineryFactory

- (NSObject *)bmwCar;
- (NSObject *)audiCar;
- (NSObject *)benzCar;

@end

#import "CarFactory.h"
#import "Audi.h"
#import "BMW.h"
#import "Benz.h"

@implementation CarFactory

+ (instancetype)factory {
    return [[[CarFactory class] alloc] init];
}

- (NSObject *)bmwCar {
    return [[BMW alloc]init];
}

- (NSObject *)benzCar {
    return [[Benz alloc]init];
}

- (NSObject *)audiCar {
    return [[Audi alloc]init];
}

@end

使用:

    CarFactory *carFactory = [CarFactory factory];
    
    [carFactory bmwCar];
    [carFactory benzCar];
    [carFactory audiCar];

结论

当你需要很多个飞机产品的时候, 你只需要创建一个飞机工厂类继承于机械工厂类.

以上是我的个人感悟, 还请大神们多多指导, 哪里不对还请指正.

****PS:****如果觉得小弟写的还可以点个👍, 或者关注我, 以鼓励我更快的成长, 小弟在此感激不尽.

Copyright © 2019- bangwoyixia.com 版权所有 湘ICP备2023022004号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务