工厂模式-工厂方法
2015-11-22 00:22
288 查看
工厂方法,属于工厂模式,由于在GOF中提出,大家都有所听闻,上一篇可以叫工厂注册的工厂模式,下面总结一下学习心得吧。
Factory Method
按图来看Factory与Product还是供client使用,并且都进行了抽象,client层仍然不关心具体类,实例化工厂或是产品具体类型都是交由它们各自的子类完成。Factory管理起有关Poduct的业务需求,即doSomething。
Product 只声明接口
ConcreteProduct负责实现Product接口
Factory 声明Create接口,可以实现默认状态或不实现;及使用Product的业务接口并实现
ConcreteFactory仅实现Create接口来提供ConcreteProdcut
Client 使用工厂方法
+当增减product也不用动到Factory类
-文件数目变多了
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类
-文件数目变多了
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 介绍php设计模式中的工厂模式
- asp.net 简单工厂模式和工厂方法模式之论述
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- js简单工厂模式用法实例
- javascript 模式设计之工厂模式详细说明
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- python中getattr函数使用方法 getattr实现工厂模式
- 检测iOS设备是否越狱的方法
- 工厂模式在Zend Framework中应用介绍
- 浅析php工厂模式