工厂模式-工厂方法
来源:互联网 发布:vb程序设计培训班 编辑:程序博客网 时间:2024/06/10 02:52
工厂方法,属于工厂模式,由于在GOF中提出,大家都有所听闻,上一篇可以叫工厂注册的工厂模式,下面总结一下学习心得吧。
Factory Method
定义
既然都是工厂模式,那都是由一个方法提供产品和实例化的产品类型并非确定咯。此变体差别多了一层工厂类的子类,即ConcreteFactory
按图来看Factory与Product还是供client使用,并且都进行了抽象,client层仍然不关心具体类,实例化工厂或是产品具体类型都是交由它们各自的子类完成。Factory管理起有关Poduct的业务需求,即doSomething。
OC实现
场景:集成原有代码的支付,功能增减时尽量少改动文件。从UML与OC结合看,需要文件又变多了,不知道是不是好事。
- Product 只声明接口
typedef NS_ENUM(NSInteger,PAY_RESULT){ PAY_RESULT_SUCCESS, PAY_RESULT_FAIL};typedef void(^completeHandle)(PAY_RESULT ret);@interface PTXPoduct : NSObject-(void)payProduct:(NSString *)orderInfo complete:(completeHandle)complete;@end
- ConcreteProduct负责实现Product接口
@interface PTXAliPayProduct : PTXPoduct@end@implementation PTXAliPayProduct-(void)payProduct:(NSString *)orderInfo complete:(completeHandle)complete{ NSLog(@"支付 %@ 产品",orderInfo); if (complete) { complete(PAY_RESULT_SUCCESS); }}@end
- Factory 声明Create接口,可以实现默认状态或不实现;及使用Product的业务接口并实现
@interface PTXFactoryM : NSObject-(PTXPoduct *)createPoduct;-(void)payWithOrder:(NSString *)order complete:(completeHandle)complete;@end@implementation PTXFactoryM-(void)payWithOrder:(NSString *)order complete:(completeHandle)complete{ PTXPoduct *product = [self createPoduct]; [product payProduct:order complete:^(PAY_RESULT ret) { if (complete) { complete(ret); } }];}@end
- ConcreteFactory仅实现Create接口来提供ConcreteProdcut
@interface PTXAliFactoryM : PTXFactoryM@end@implementation PTXAliFactoryM-(PTXPoduct *)createPoduct{ return [PTXAliPayProduct new];}@end
- Client 使用工厂方法
- (void)viewDidLoad { [super viewDidLoad]; PTXFactoryM *creator = [PTXAliFactoryM new]; [creator payWithOrder:@"一本书" complete:^(PAY_RESULT ret) { if (ret == PAY_RESULT_SUCCESS) { NSLog(@"支付成功"); } else { NSLog(@"支付失败"); } }];}
优点缺点
与注册工厂对比,现在自己还是区别不出来优劣,只有项目里面去实践吧
+当增减product也不用动到Factory类
-文件数目变多了
1 0
- 工厂模式 -- 工厂方法
- 工厂模式-工厂方法
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式---工厂方法模式
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂方法、抽象工厂模式
- 工厂模式(简单工厂、工厂方法)
- 简单工厂|工厂方法|抽象工厂模式
- 工厂方法,抽象工厂模式
- C#工厂模式-工厂方法
- 工厂模式 和工厂方法
- 工厂模式-C-工厂方法
- 工厂模式以及工厂方法
- 设计模式-工厂模式(简单工厂,工厂方法,抽象工厂)
- java工厂模式-简单工厂,工厂方法,抽象工厂模式
- 服务器配置raid10和两个raid1的区别
- 总结iOS 8和Xcode 6的各种坑
- Android ADB命令大全
- Effective C++ 笔记 第五部分 实现
- flash与js交互
- 工厂模式-工厂方法
- HDU 2767 Proving Equivalences(强连通缩点)
- TreeSet排序Comparator
- 学习日记:jQuery之what,why,where,how及应用 (上)
- VirtualBox 5.0(虚拟机软件)里,安装Fedora遇到的问题!!
- OpenGLES 3.0
- [leetcode]Rotate Array
- Codeforces Round #332 (Div. 2) C. Day at the Beach
- 正则表达式