抽象工厂模式
细节就不说了,简单的通过模拟场景来挖掘其优点。
产品类
IRequest 接口,包含网络请求相关的方法,比如 addHeader(),toUrl()等方法。
工厂类
IRequestFactory接口,包含创建IRequest 的方法,createRequest();
模拟两种框架(OkHttp 和 XUtil)
包含以下实现类
OkRequestFactory(工厂)
OkRequest(产品)
XUtilRequestFactory(工厂)
XUtilRequest(产品)
类图如下:
再看看调用
IRequestFactory manager;
//根据类型自动选择框架
switch (httpType) {
case 1:
manager = new OkRequestFactory();
break;
default:
manager = new XUtilRequestFactory();
break;
}
IRequest request = manager.createRequest();
request.toUrl();
- 总结(仔细观察代码):
- 首先 工厂跟产品是一对多的关系;
- 其次 调用过程无需关注产品具体类,逻辑分装在工厂类中;
- 再次 可以进行比较好的业务切换(工厂选择的切换)
- 最后 是缺点,每增加一种类别的产品,意味着需要增加一种对应的工厂;