首页 > 编程语言 >Glide源码阅读之工厂模式4总结

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

时间:2023-09-19 12:08:21浏览次数:50  
标签:总结 implements Glide StreamFactory Factory 接口 工厂 源码 模式

工厂模式的应用比较多;变化形态也是各种各样。但经过这段时间的解读。大概可以用浓缩为
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系统源码有很大提升作用

面试

说说工厂模式

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

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

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

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

自研产品推荐

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

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

为了更好服务大家把之前的公众号和软件激活结合,如有疑问请大家反馈到公众号即可,下个版本30%以上的更新会来自公众号的反馈。

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

下面是一段smartApi使用介绍:

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

下载地址:

https://pan.baidu.com/s/1kFAGbsFIk3dDR64NwM5y2A?pwd=csdn


标签:总结,implements,Glide,StreamFactory,Factory,接口,工厂,源码,模式
From: https://blog.51cto.com/u_16264967/7523920

相关文章

  • Glide源码阅读之状态模式[SingleRequest<R>.Status]
    前言前面写完策略模式,接着写状态模式;在开始接触这两个模式的时候我也很疑惑,这两个设计模式很相似,用法也很类似。好一段时间我都没有区分这两者的区别。在使用的时候也不知道怎么选择,后来慢慢的加深理解也就总结出规律了。先看看状态模式的经典结构状态模式介绍《Android源码设计模......
  • Glide源码阅读之策略模式4总结
    《Android源码设计模式解析与实践》定义策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化使用场景针对同一类型问题的多种处理方式。仅仅是具体行为有差别时需要安全地封装多种同一类型的操作时出现同一抽......
  • Glide源码阅读之工厂模式2【DiskCache.Factory】
    DiskCache.Factory包路径:com.bumptech.glide.load.engine.cache.DiskCachecom.bumptech.glide.load.engine.cache.DiskCache.Factory/**Aninterfaceforwritingtoandreadingfromadiskcache.*/一种向磁盘缓存写入和从磁盘缓存读取数据的接口。publicinterfaceDiskCa......
  • Glide源码阅读之工厂模式1【ModelLoaderFactory】【ModelLoader】
    使用场景介绍摘自菜鸟教程|设计模式|工厂模式意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决:主要解决接口选择的问题。何时使用:我们明确地计划不同条件下创建不同实例时。如何解决:让其子类实现工厂接口,返回的也是一个......
  • Glide源码阅读之建造者(builder)模式3【RequestOptions】【BaseRequestOptions】
    官方定义本来解析完GlideBuilder、RequestBuilder就已经觉得建造者模式用的变化有些大了,但随着解析的进行发现还要下面的这两种变种应用。先解析出来给大家看看,说不定在某些场景下能启发读者使用这种模式应用方式builder模式应用变化一结构:publicstaticRequestOptionssizeXXXX(p......
  • 迭代器、生成器、模块和包知识点总结
    第一部分:迭代器 例1. for....in运行机制li=[1,2,3,4]#在列表中取值从第一个取到最后一个结束#foriinli:#print(i)#1,2,3,4i=0whilei<len(li):#索引#print(i)#输出索引0,1,2,3print(li[i])#取列表值i+=1print(i)#i=4的时......
  • BCB图像处理总结
    近期遇到了一下图像处理的问题,特总结一下 BCB截图一、画布(Canvas)Graphics::TBitmap*bmp=newGraphics::TBitmap;TCanvas*canvas=newTCanvas;HDChdc=GetDC(NULL);canvas->Handle=hdc;bmp->Width=Screen->Width;bmp->Height=Screen->Height;bmp->Canvas->CopyRect(Rect......
  • 万字长文深度解读Java线程池,硬核源码分析
    前言本文将深入分析Java线程池的源码,包括线程池的创建、任务提交、工作线程的执行和线程池的关闭等过程。通过对线程池源码的解析,我们能够更好地理解线程池的原理和机制,为我们在实际开发中合理使用线程池提供指导。文章内容较长,建议找个安静的环境慢慢细读,由于线程池涉及的内容......
  • 云HIS医院信息化管理系统源码:集团化管理,多租户机制,满足医院业务需求
    随着云计算、大数据、物联网等新兴技术的迅猛发展,HIS模式的理念、运行机制更新,衍生出了新的HIS模式——云HIS。云HIS是基于云计算、大数据、互联网等高新技术研发的医疗卫生信息平台,它实现了医院信息化从局域网向互联网转型,并重新定义了医疗卫生信息化建设的理念、框架、功能以及运......
  • 一次访问Redis延时高问题排查与总结
    一次访问Redis延时高问题排查与总结https://mp.weixin.qq.com/s/f3dQIC4DBhWibyXQKBXrzg实战总结|一次访问Redis延时高问题排查与总结(续)https://mp.weixin.qq.com/s/trbGNYZPEfzaAMz6kZ_YKg翻译搜索复制......