【iOS-设计模式】创建型之工厂方法模式

概念

工厂方法模式(Factory Method Pattern)在基类中建立一个抽象方法,子类可以通过改写这一方法来改变创建对象的具体过程。工厂方法模式让子类来决定如何创建对象,来达到封装的目的。

实例

接下来还是使用计算器的例子,我们先实现一个工厂协议 CalculateFactoryProtocol 返回一个计算处理类:

@class Calculate;
@protocol CalculateFactoryProtocol <NSObject>

+ (Calculate *)createCalculate;

@end

工厂实现

然后创建相应的用于创建生产计算方法处理类的工厂(都遵循 CalculateFactoryProtocol 协议),实现协议中的协议方法 createCalculate,返回一个计算处理父类,而所实例化的为各个计算处理方法类(都是继承自计算处理父类 Calculate):

AddFactory.h

#import <Foundation/Foundation.h>
#import "CalculateFactoryProtocol.h"

@interface AddFactory : NSObject <CalculateFactoryProtocol>

@end

AddFactory.m

#import "AddFactory.h"
#import "Calculate_Add.h"

@implementation AddFactory

+ (Calculate *)createCalculate {
    return [[Calculate_Add alloc] init];
}

@end

SubFactory.h

#import <Foundation/Foundation.h>
#import "CalculateFactoryProtocol.h"

@interface SubFactory : NSObject <CalculateFactoryProtocol>

@end

SubFactory.m

#import "SubFactory.h"
#import "Calculate_Sub.h"

@implementation SubFactory

+ (Calculate *)createCalculate {
    return [[Calculate_Sub alloc] init];
}

@end

调用

Calculate *calculate_add = [AddFactory createCalculate];
calculate_add.firstNum = 3.0f;
calculate_add.secondNum = 6.0f;
NSLog(@"工厂方法模式-求和:%f",[calculate_add getResult]);

Calculate *calculate_sub = [SubFactory createCalculate];
calculate_sub.firstNum = 9.0f;
calculate_sub.secondNum = 3.0f;
NSLog(@"工厂方法模式-求差:%f",[calculate_sub getResult]);

执行结果:

执行结果

从对象的创建来讲,这个将对象的创建扩展到了对象子类,从设计原则中中的依赖角度来看,原来的工厂需要依赖的各种具体的服装子类的引用,现在将这些进行各种分类,这里是以工厂的形式进行分类,抽象组件不依赖于具体的实现组件,已经完成的扩展可以不需要变化,如果有新增需求只需要增加新的功能接口,高层组件不需要太大的变化。

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

推荐阅读更多精彩内容