您的位置:首页 > 移动开发 > IOS开发

iOS-工厂方法模式的运用

2017-10-24 13:05 169 查看
原文发布在个人简书,更多内容欢迎关注笔者简书 ,评论、互相交流请到简书,谢谢!

设计模式这个高大上的词似乎每天都在听。设计模式在服务端设计时体现的比较明显。虽然移动端设计模式没有服务端那么明显,但是做为移动端开发人员掌握各种设计模式的思想有助于提高代码质量。

今天先聊聊工厂方法模式在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 设计模式 移动