iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >Android中Builder模式的作用有哪些
  • 328
分享到

Android中Builder模式的作用有哪些

androidbuilder 2023-05-30 20:05:29 328人浏览 独家记忆
摘要

Android中Builder模式的作用有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。定义将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示使用场景

Android中Builder模式的作用有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

定义

将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示

使用场景

当初始化一个对象特别复杂时,如参数多,且很多参数都具有默认值时
相同的方法,不同的执行顺序,产生不同的事件结果时
多个部件或零件,都可以装配到一个对象中,但是产生的运行效果又不相同时
产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个时候使用建造者模式非常合适

使用例子

AlertDialog
universal-image-loader

实现

实现的要点

简言之,就是把需要通过set方法来设置的多个属性封装在一个配置类里面
每个属性都应该有默认值
具体的set方法放在配置类的内部类Builder类中,并且每个set方法都返回自身,以便进行链式调用

实现方式

下面以我们的图片加载框架ImageLoder为例来看看Builder模式的好处

未采用Builder模式的ImageLoader

public class ImageLoader { //图片加载配置 private int loadingImageId; private int loadingFailImageId; // 图片缓存,依赖接口 ImageCache mImageCache = new MemoryCache(); // 线程池线程数量为CPU的数量 ExecutorService mExecutorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); //省略单例模式实现  public void setImageCache(ImageCache cache) {  mImageCache = cache; }  public Builder setLoadingPlaceholder(int resId) {  loadingImageId = resId; }  public Builder setLoadingFailPlaceholder(int resId) {  loadingFailImageId = resId; }  public void displayImage(String imageUrl, ImageView imageView) {  Bitmap bitmap = mImageCache.get(imageUrl);  if (bitmap != null) {   imageView.setImageBitmap(bitmap);   return;  }  // 图片没有缓存,提交到线程池下载  submitLoadRequest(imageUrl, imageView); }  private void submitLoadRequest(final String imageUrl, final ImageView imageView) {  imageView.setImageResource(loadingImageId);  imageView.setTag(imageUrl);  mExecutorService.submit(new Runnable() {   @Override   public void run() {    Bitmap bitmap = downloadImage(imageUrl);    if (bitmap == null) {     imageView.setImageResource(loadingFailImageId);     return;    }    if (imageUrl.equals(imageView.getTag())) {     imageView.setImageBitmap(bitmap);    }    mImageCache.put(imageUrl, bitmap);   }  }); }  private Bitmap downloadImage(String imageUrl) {  Bitmap bitmap = null;  //省略下载部分代码  return bitmap; }}

从上面的代码中我们可以看出,每当需要增加一个设置选项的时候,就需要修改ImageLoader的代码,违背了开闭原则,而且ImageLoader中的代码会越来越多,不利于维护
下面我们来看看如何用Builder模式来改造ImageLoader

首先是把ImageLoader的设置都放在单独的配置类里,每个set方法都返回this,从而达到链式调用的目的

public class ImageLoaderConfig { // 图片缓存,依赖接口 public ImageCache mImageCache = new MemoryCache(); //加载图片时的loading和加载失败的图片配置对象 public DisplayConfig displayConfig = new DisplayConfig(); //线程数量,默认为CPU数量+1; public int threadCount = Runtime.getRuntime().availableProcessors() + 1; private ImageLoaderConfig() { }  public static class Builder {  // 图片缓存,依赖接口  ImageCache mImageCache = new MemoryCache();  //加载图片时的loading和加载失败的图片配置对象  DisplayConfig displayConfig = new DisplayConfig();  //线程数量,默认为CPU数量+1;  int threadCount = Runtime.getRuntime().availableProcessors() + 1;    public Builder setThreadCount(int count) {   threadCount = Math.max(1, count);   return this;  }    public Builder setImageCache(ImageCache cache) {   mImageCache = cache;   return this;  }    public Builder setLoadingPlaceholder(int resId) {   displayConfig.loadingImageId = resId;   return this;  }    public Builder setLoadingFailPlaceholder(int resId) {   displayConfig.loadingFailImageId = resId;   return this;  }  void applyConfig(ImageLoaderConfig config) {   config.displayConfig = this.displayConfig;   config.mImageCache = this.mImageCache;   config.threadCount = this.threadCount;  }    public ImageLoaderConfig create() {   ImageLoaderConfig config = new ImageLoaderConfig();   applyConfig(config);   return config;  } }}

ImageLoader的修改

public class ImageLoader { //图片加载配置 ImageLoaderConfig mConfig; // 图片缓存,依赖接口 ImageCache mImageCache = new MemoryCache(); // 线程池,线程数量为CPU的数量 ExecutorService mExecutorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); //省略单例模式实现 //初始化ImageLoader public void init(ImageLoaderConfig config) {  mConfig = config;  mImageCache = mConfig.mImageCache; }  public void displayImage(String imageUrl, ImageView imageView) {  Bitmap bitmap = mImageCache.get(imageUrl);  if (bitmap != null) {   imageView.setImageBitmap(bitmap);   return;  }  // 图片没有缓存,提交到线程池下载  submitLoadRequest(imageUrl, imageView); }  private void submitLoadRequest(final String imageUrl, final ImageView imageView) {  imageView.setImageResource(mConfig.displayConfig.loadingImageId);  imageView.setTag(imageUrl);  mExecutorService.submit(new Runnable() {   @Override   public void run() {    Bitmap bitmap = downloadImage(imageUrl);    if (bitmap == null) {     imageView.setImageResource(mConfig.displayConfig.loadingFailImageId);     return;    }    if (imageUrl.equals(imageView.getTag())) {     imageView.setImageBitmap(bitmap);    }    mImageCache.put(imageUrl, bitmap);   }  }); }  private Bitmap downloadImage(String imageUrl) {  Bitmap bitmap = null;  //省略下载部分代码  return bitmap; }}

调用形式,是不是很熟悉?

ImageLoaderConfig config = new ImageLoaderConfig.Builder()  .setImageCache(new MemoryCache())  .setThreadCount(2)  .setLoadingFailPlaceholder(R.drawable.loading_fail)  .setLoadingPlaceholder(R.drawable.loading)  .create();ImageLoader.getInstance().init(config);

看完上述内容,你们掌握Android中Builder模式的作用有哪些的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: Android中Builder模式的作用有哪些

本文链接: https://www.lsjlt.com/news/220800.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android中Builder模式的作用有哪些
    Android中Builder模式的作用有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。定义将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示使用场景...
    99+
    2023-05-30
    android builder
  • Android中怎么实现Builder模式
    Android中怎么实现Builder模式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Builder模式使用链式结构创建复杂对象,将过程与结果分开,创建过程中...
    99+
    2023-05-30
    android builder
  • BUILDER模式有什么用
    今天小编给大家分享一下BUILDER模式有什么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。效果它使你可对构造过程进行更精...
    99+
    2023-06-19
  • Java中模版方法模式的作用有哪些
    Java中模版方法模式的作用有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算...
    99+
    2023-05-31
    java 模版方法模式
  • Android的启动模式有哪些
    Android的启动模式有以下几种:1. standard(标准模式):默认的启动模式。每次启动Activity都会创建一个新的实例...
    99+
    2023-08-09
    Android
  • 常用的Android设计模式有哪些
    常用的Android设计模式有以下几种:1. MVC模式(Model-View-Controller):将应用程序分为三个部分,即数...
    99+
    2023-09-26
    Android
  • android中mediasession的作用有哪些
    MediaSession在Android中的作用包括: 控制媒体播放器:通过MediaSession可以控制媒体播放器的播放、暂停...
    99+
    2024-03-06
    android
  • Java中创建类模式的作用有哪些
    Java中创建类模式的作用有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。创建类模式主要关注对象的创建过程,将对象的创建过程进行封装,使客户端可以直接得到对...
    99+
    2023-05-31
    java 创建类模式
  • SharedPreferences在Android中的作用有哪些
    今天就跟大家聊聊有关SharedPreferences在Android中的作用有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 SharedPreferences作为A...
    99+
    2023-05-31
    android sharedpreferences
  • android设计模式的应用场景有哪些
    Android设计模式的应用场景有以下几个:1. MVC(Model-View-Controller)模式: 在Android中,M...
    99+
    2023-08-24
    android
  • Fragment在Android应用中的作用有哪些
    这篇文章给大家介绍Fragment在Android应用中的作用有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.这个用法的原因和意义在未登录情况下,点击很多地方都可能要跳到登陆界面,登陆成功后,当前页面需要刷新我...
    99+
    2023-05-31
    android fragment
  • linux cpio有哪些操作模式
    今天小编给大家分享一下linux cpio有哪些操作模式的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
    99+
    2023-02-10
    linux cpio
  • Android应用中SearchView属性的作用有哪些
    这期内容当中小编将会给大家带来有关Android应用中SearchView属性的作用有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。SearchView是搜索框组件,它可以让用户在文本框里输入文字,通...
    99+
    2023-05-31
    android searchview
  • Android中打包的方式有哪些
    今天就跟大家聊聊有关Android中打包的方式有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。01.应用的打包签名什么是打包?打包就是根据签名和其他标识生成安装包。签名是什么?在...
    99+
    2023-05-31
    android roi %d
  • 常用的Vue模式有哪些
    这篇文章给大家分享的是有关常用的Vue模式有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.处理加载状态在大型应用程序中,我们可能需要将应用程序划分为更小的块,只有在需要时...
    99+
    2024-04-02
  • 常用的HTML5模式有哪些
    这篇文章主要介绍了常用的HTML5模式有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇常用的HTML5模式有哪些文章都会有所收获,下面我们一起来看看吧。 type=&qu...
    99+
    2024-04-02
  • vue运用的模式有哪些
    这篇文章主要介绍“vue运用的模式有哪些”,在日常操作中,相信很多人在vue运用的模式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue运用的模式有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-07-04
  • Android控件Spinner的作用有哪些
    Android控件Spinner的作用主要有以下几点: 提供下拉选择功能:Spinner控件可以通过下拉列表的形式显示多个选项,...
    99+
    2023-10-24
    Android Spinner
  • js中this有哪些模式
    小编给大家分享一下js中this有哪些模式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!说明在方法调用模式下,this总是指向调用方法的对象,this的方向与方法...
    99+
    2023-06-20
  • html中的css样式的作用有哪些
    本篇内容介绍了“html中的css样式的作用有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!html中的css样式的作用是把页面内容和修...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作