iOS-工厂方法模式的运用

原文发布在个人简书,更多内容欢迎关注笔者简书 ,评论、互相交流请到简书,谢谢!

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

今天先聊聊工厂方法模式在iOS端的实际运用。后续通过其他篇幅再聊其他的设计模式。

  一些设计模式书籍里都是这样描述工厂方法模式:
  定义创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。

  工厂方法使用的情况:一个类无法预期需要生成哪个类的对象,想让其子类来指定所生成的对象。

比如:有交通工具这样一个工厂类,它下面有一个createVehicle生产交通工具这样一个方法,返回交通工具的实例,但是具体返回什么交通工具并不确定。 交通工具工厂类下又有飞机工厂类、汽车工厂类、火车工厂类这些子类,我们能知道的是飞机工厂可以生存飞机实例,汽车工厂可以生产汽车实例,火车工厂可以生产火车实例。
所以,只需要在相应的工厂createVehicle方法中,返回相应的交通工具实例就可以了。(飞机工厂的createVehicle方法中返回飞机的实例,汽车工厂的createVehicle方法中返回汽车的实例…)

iOS-工厂方法模式的运用_第1张图片

参考上面类图最直白的理解:创建不同的工厂去生产不同的产品,但是这些工厂的生产产品的方法是一样的。,如果笔者理解有误,也随时欢迎大家指正,多多交流。

我们不直接去创建具体的detailProduct对象,而是通过FatherFactory的子类,不同的子类都实现或者重写同一个方法,但是返回不同的product对象实例。在实际运用时,就可以根据切换不同的工厂,得到不同product实例了。笔者已写好详细的demo
说明: 笔者将NXWebViewKit做成了一个组件,所以克隆下来demo结构如下

iOS-工厂方法模式的运用_第2张图片

iOS-工厂方法模式的运用_第3张图片

如果对组件化不了解的朋友,可以看笔者之前的几篇关于组件化实践的文章

下面笔者将通过实际的应用来说说笔者理解的工厂方法模式。
iOS-工厂方法模式的运用_第4张图片

该demo组件中有三种类型的webView(ProgressWebView、LoadingWebView、AlertWebView)

iOS-工厂方法模式的运用_第5张图片

iOS-工厂方法模式的运用_第6张图片

iOS-工厂方法模式的运用_第7张图片

不直接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小记)