AI智能
改变未来

【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]);

执行结果:

执行结果

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

  • 点赞
  • 收藏
  • 分享
  • 文章举报

GS-NICE发布了177 篇原创文章 · 获赞 0 · 访问量 2714私信关注

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 【iOS-设计模式】创建型之工厂方法模式