iOS-工厂方法模式的运用
2017-10-24 13:05
169 查看
原文发布在个人简书,更多内容欢迎关注笔者简书 ,评论、互相交流请到简书,谢谢!
设计模式这个高大上的词似乎每天都在听。设计模式在服务端设计时体现的比较明显。虽然移动端设计模式没有服务端那么明显,但是做为移动端开发人员掌握各种设计模式的思想有助于提高代码质量。
今天先聊聊工厂方法模式在iOS端的实际运用。后续通过其他篇幅再聊其他的设计模式。
比如:有交通工具这样一个工厂类,它下面有一个
所以,只需要在
参考上面类图最直白的理解:创建不同的工厂去生产不同的产品,但是这些工厂的生产产品的方法是一样的。,如果笔者理解有误,也随时欢迎大家指正,多多交流。
我们不直接去创建具体的
说明: 笔者将NXWebViewKit做成了一个组件,所以克隆下来demo结构如下
如果对组件化不了解的朋友,可以看笔者之前的几篇关于组件化实践的文章
下面笔者将通过实际的应用来说说笔者理解的工厂方法模式。
该demo组件中有三种类型的
不直接
ProgressWebViewFactory 具体实现如下
LoadingWebViewFactory 具体实现如下
AlertWebViewFactory 具体实现如下
三种不同类型的webView对应三个WebViewFactory的子类工厂,通过重写父类的抽象方法来生成具体的webView实例,
工厂设计模式作为各大设计模式书籍的开端、还是比较简单的。详细的demo在这里下载,欢迎交流。
设计模式这个高大上的词似乎每天都在听。设计模式在服务端设计时体现的比较明显。虽然移动端设计模式没有服务端那么明显,但是做为移动端开发人员掌握各种设计模式的思想有助于提高代码质量。
今天先聊聊工厂方法模式在iOS端的实际运用。后续通过其他篇幅再聊其他的设计模式。
一些设计模式书籍里都是这样描述工厂方法模式: 定义创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。 工厂方法使用的情况:一个类无法预期需要生成哪个类的对象,想让其子类来指定所生成的对象。
比如:有交通工具这样一个工厂类,它下面有一个
createVehicle生产交通工具这样一个方法,返回交通工具的实例,但是具体返回什么交通工具并不确定。
交通工具工厂类下又有飞机工厂类、汽车工厂类、火车工厂类这些子类,我们能知道的是飞机工厂可以生存飞机实例,汽车工厂可以生产汽车实例,火车工厂可以生产火车实例。
所以,只需要在
相应的工厂createVehicle方法中,返回相应的交通工具实例就可以了。(飞机工厂的createVehicle方法中返回飞机的实例,汽车工厂的createVehicle方法中返回汽车的实例…)
参考上面类图最直白的理解:创建不同的工厂去生产不同的产品,但是这些工厂的生产产品的方法是一样的。,如果笔者理解有误,也随时欢迎大家指正,多多交流。
我们不直接去创建具体的
detailProduct对象,而是通过FatherFactory的子类,不同的子类都实现或者重写同一个方法,但是
返回不同的product对象实例。在实际运用时,就可以根据切换不同的工厂,得到不同product实例了。笔者已写好详细的demo
说明: 笔者将NXWebViewKit做成了一个组件,所以克隆下来demo结构如下
如果对组件化不了解的朋友,可以看笔者之前的几篇关于组件化实践的文章
下面笔者将通过实际的应用来说说笔者理解的工厂方法模式。
该demo组件中有三种类型的
webView(ProgressWebView、LoadingWebView、AlertWebView)。
不直接
alloc init具体的webView类型,具体的
webView实例是通过
WebViewFactory工厂基类中定义的抽象方法
createWebViewWithFrame:params来创建的.
ProgressWebViewFactory 具体实现如下
@implementation ProgressWebViewFactory + (WebView *)createWebViewWithFrame:(CGRect)frame params:(NSDictionary *)params { return [[ProgressWebView alloc] initWithFrame:frame params:params]; } @end
LoadingWebViewFactory 具体实现如下
@implementation LoadingWebViewFactory + (WebView *)createWebViewWithFrame:(CGRect)frame params:(NSDictionary *)params { return [[LoadingWebView alloc] initWithFrame:frame params:params]; } @end
AlertWebViewFactory 具体实现如下
@implementation AlertWebViewFactory + (WebView *)createWebViewWithFrame:(CGRect)frame params:(NSDictionary *)params { return [[AlertWebView alloc] initWithFrame:frame params:params]; } @end
三种不同类型的webView对应三个WebViewFactory的子类工厂,通过重写父类的抽象方法来生成具体的webView实例,
ProgressWebViewFactory工厂生成
ProgressWebView的实例,
LoadingWebViewFactory工厂生成
LoadingWebView的实例,
AlertWebViewFactory工厂生成
AlertWebView的实例.
工厂设计模式作为各大设计模式书籍的开端、还是比较简单的。详细的demo在这里下载,欢迎交流。
相关文章推荐
- iOS应用设计模式开发中对简单工厂和工厂方法模式的运用
- iOS应用设计模式开发中对简单工厂和工厂方法模式的运用
- 运用iOS的AudioQueue生成Wav文件
- 【iOS开发-48】九宫格布局案例:自动布局、字典转模型运用、id和instancetype区别、xib重复视图运用及与nib关系
- IOS开发入门基本知识——UIButton生成的关灯游戏(tag值的灵活运用)
- IOS学习笔记 运用Quartz 2D框架绘制常见的图形(2)
- 正则表达式在iOS中的运用
- 正则表达式在iOS中的运用
- iOS开发多线程在实际项目中的运用
- 【学习ios之路:C语言】数组.循环.语句总和运用试题练习
- 【iOS开发-107】UISplitViewController:如何取得master和detail控制器,核心在于如何运用代理
- ios tableview section的运用
- iOS----关于第三方的运用(有待补充)
- iOS - Runtime 细致分析及具体运用
- 正则表达式在iOS中的运用
- ios之Autolayout的运用
- 正则表达式在iOS中的运用
- 白话 Ruby 与 DSL 以及在 iOS 开发中的运用
- AJ学IOS 之小知识iOS启动动画_Launch Screen的运用
- iOS----青花瓷运用->下载历史版本App