Glide源码阅读之工厂模式4总结

参考阅读:

Glide多种组合使用方式记录–没有全部亲测,大家可以根据实际需要选用
Glide设计模式之工厂模式1【ModelLoaderFactory】
Glide设计模式之工厂模式2【DiskCache.Factory】
Glide工厂模式3【TransitionFactory】【Transition】
Glide设计模式之工厂模式4总结

工厂模式的应用比较多;变化形态也是各种各样。但经过这段时间的解读。大概可以用浓缩为
1、不是使用new创建对象;
2、没有明显build方法创建对象;
3、带xxxFactory的几乎都满足工厂模式。
当然第3点比较明显。如果不带xxxFactory等这样的标识那看看是否有implements、extends。而且内部有类似创建对象的方法如:create([params]);这样也可以等同工厂模式实现形式。

几个典型工厂模式结构

目标接口业务+n个实现类+工厂类

如菜鸟教程里的工厂模式
目标接口:interface Shape

实现类如下:

  • class Square implements Shape
  • class Circle implements Shape
  • Rectangle implements Shape

工厂类:class ShapeFactory

目标产品业务接口+工厂业务接口+n个实现类

如下表:

产品业务接口工厂业务接口实现类
ModelLoader ModelLoaderFactory AssetUriLoader.FileDescriptorFactory, AssetUriLoader.StreamFactory, ByteArrayLoader.ByteBufferFactory, ByteArrayLoader.StreamFactory, ByteBufferFileLoader.Factory, DataUrlLoader.StreamFactory, FileLoader.Factory, FileLoader.FileDescriptorFactory, FileLoader.StreamFactory, HttpGlideUrlLoader.Factory, HttpUriLoader.Factory, MediaStoreFileLoader.Factory, MediaStoreImageThumbLoader.Factory, MediaStoreVideoThumbLoader.Factory, OkHttpUrlLoader.Factory, OkHttpUrlLoader.Factory, QMediaStoreUriLoader.FileDescriptorFactory, QMediaStoreUriLoader.InputStreamFactory, ResourceLoader.AssetFileDescriptorFactory, ResourceLoader.FileDescriptorFactory, ResourceLoader.StreamFactory, ResourceLoader.UriFactory, StringLoader.AssetFileDescriptorFactory, StringLoader.FileDescriptorFactory, StringLoader.StreamFactory, UnitModelLoader.Factory, UriLoader.AssetFileDescriptorFactory, UriLoader.FileDescriptorFactory, UriLoader.StreamFactory, UrlLoader.StreamFactory, UrlUriLoader.StreamFactory, VolleyUrlLoader.Factory
DiskCache DiskCache.Factory DiskCacheAdapter.Factory、 DiskLruCacheFactory、ExternalCacheDiskCacheFactory、ExternalPreferredCacheDiskCacheFactory、InternalCacheDiskCacheFactory
Transition TransitionFactory BitmapContainerTransitionFactory, BitmapTransitionFactory, DrawableCrossFadeFactory, NoTransition.NoAnimationFactory, ViewAnimationFactory, ViewPropertyAnimationFactory

n个目标业务接口+n个目标实现类+抽象类或接口工厂类+n个实现类工厂+组装厂

多个目标业务接口

  • interface Shape
  • interface Color

多个个目标实现类

  • class Rectangle implements Shape
  • class Square implements Shape
  • class Circle implements Shape
  • class Red implements Color
  • class Green implements Color
  • class Blue implements Color

抽象类或接口工厂类:

public abstract class AbstractFactory {
   public abstract Color getColor(String color);
   public abstract Shape getShape(String shape);
}

多个实现类工厂

  • class ShapeFactory extends AbstractFactory
  • class ColorFactory extends AbstractFactory

再加一个组装厂

public class FactoryProducer {
   public static AbstractFactory getFactory(String choice){
      if(choice.equalsIgnoreCase("SHAPE")){
         return new ShapeFactory();
      } else if(choice.equalsIgnoreCase("COLOR")){
         return new ColorFactory();
      }
      return null;
   }
}

一些感悟

熟悉理解了工厂模式之后再去读Java源码或者Android源码感觉会轻松不少
很多时候对象在哪创建的?这个不是特别好找到具体代码行,就像前面篇章里的单例模式。来来回回的调用了四五个方法后才开始创建单例对象。虽然繁琐但还算好找的了。在Android源码里很多对象的使用时去寻找创建对象的源头。发现跳转的很远的地方。
熟悉理解各种工厂模式的结构势在必行。对于读懂各大开源组件和Android系统源码有很大提升作用

面试

说说工厂模式

答:可以直接给出本章的三种工厂模式结构。并进行一一说明使用场景,当然这个对组织语言表达要求较高一些。不过私下里多练习几篇,然后找同事或者同学对练几遍也就熟悉了。

进一步提问:为什么使用工厂模式

这个回答方向有很多。作者基于面向对象编程这方面说一些:工厂模式很明显的是定义好了生产目标业务接口。工厂实现可以随意,目标业务接口实现也可以任意。但最终的创建对象产品要满足业务接口的定义。这就达成了业务接口统一。解决了接口选择问题。
对外不涉及具体实现。只关注接口业务。
如此在扩展和维护上就很便利了。
当然还有进一步的深入,这里就不展开了。有兴趣留言讨论。

看完本章,希望读者们对于各种工厂模式的奇葩形式一眼看透。同时在谈起工厂模式你就是程序员里最靓的仔。

更多设计模式解读

单例模式
Glide设计模式之单例模式
空对象模式
Glide设计模式之空对象模式【EmptyModelLoader】【EmptyList<E>
建造者模式
Glide多种组合使用方式记录–没有全部亲测,大家可以根据实际需要选用
Glide设计模式之建造者(builder)模式1【GlideBuilder】
Glide设计模式之建造者(builder)模式2【RequestBuilder】
Glide设计模式之建造者(builder)模式3【RequestOptions】【BaseRequestOptions】
Glide设计模式之建造者(builder)模式4总结【MemorySizeCalculator】【GlideExecutor】【PreFillType】【LazyHeaders】
工厂模式
Glide设计模式之工厂模式1【ModelLoaderFactory】
Glide设计模式之工厂模式2【DiskCache.Factory】
Glide工厂模式3【TransitionFactory】【Transition】
Glide设计模式之工厂模式4总结

自研产品推荐

历时一年半多开发终于smartApi-v1.0.0版本在2023-09-15晚十点正式上线
smartApi是一款对标国外的postman的api调试开发工具,由于开发人力就作者一个所以人力有限,因此v1.0.0版本功能进行精简,大功能项有:

  • api参数填写
  • api请求响应数据展示
  • PDF形式的分享文档
  • Mock本地化解决方案
  • api列表数据本地化处理
  • 再加上UI方面的打磨

为了更好服务大家把之前的公众号和软件激活结合,如有疑问请大家反馈到公众号即可,下个版本30%以上的更新会来自公众号的反馈。
嗯!先解释不上服务端原因,API调试工具的绝大多数时候就是一个数据模型、数据处理、数据模型理解共识的问题解决工具,所以作者结合自己十多年开发使用的一些痛点来打造的,再加上服务端开发一般是面向企业的,作者目前没有精力和时间去打造企业服务。再加上没有资金投入所以服务端开发会滞后,至于什么时候会进行开发,这个要看募资情况和用户反馈综合考虑。虽然目前国内有些比较知名的api工具了,但作者使用后还是觉得和实际使用场景不符。如果有相关吐槽也可以在作者的公众号里反馈蛤!
下面是一段smartApi使用介绍:
在这里插入图片描述

下载地址:

https://pan.baidu.com/s/1iultkXqeLNG4_eNiefKTjQ?pwd=cnbl

posted @ 2022-01-05 09:27  lichong951  阅读(1)  评论(0编辑  收藏  举报  来源