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个实现类

如下表:

产品业务接口工厂业务接口实现类
ModelLoaderModelLoaderFactoryAssetUriLoader.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
DiskCacheDiskCache.FactoryDiskCacheAdapter.Factory、 DiskLruCacheFactory、ExternalCacheDiskCacheFactory、ExternalPreferredCacheDiskCacheFactory、InternalCacheDiskCacheFactory
TransitionTransitionFactoryBitmapContainerTransitionFactory, 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/1kFAGbsFIk3dDR64NwM5y2A?pwd=csdn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lichong951

你的鼓励决定更新的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值