概念
工厂方法模式(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私信关注