最近在学习图片加载框架Glide的时候,被他精简的写法震惊了。一句话,就可以搞定。

Glide.with(mContext)
.load(url)
.centerCrop()
.placeholder(R.drawable.default_img)
.crossFade()
.into(mImageView);

 

同时在年初的时候,学习RXJava的时候,用链式编程很优雅。

     Observable
.just( "1" , "2" )
.subscribeOn(Schedulers.io() )
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<String>() {
@Override
public void call(String s) { }
}) ;

  

今天就来学习一下,建造者模式在Android中简单应用 。

Builder 的好处

  • 代码可读性好,只需要写一句代码,链式编程很优雅
  • 方便。通过不同的组合就可以创建不同的对象
  • 解耦。不需要知道细节,将对象本身与对象构造过程分离。

Builder 模式要怎么写?

package com.app.lib;

/**
* Created by ${zyj} on 2016/6/27.
*/
public class UserMoule { private String id ;
private String name ; public UserMoule( String id , String name ){
this.id = id ;
this.name = name ;
} static class Builder {
private String id ;
private String name ; public Builder setId(String id) {
this.id = id;
return this ;
} public Builder setName(String name) {
this.name = name;
return this ;
} public UserMoule create(){
return new UserMoule( id , name ) ;
}
} }

  调用

      new UserMoule.Builder()
.setId( "id")
.setName( "json")
.create() ;

  

为什么 Builder 要用 Static 修饰?

一般写内部类的意图都是为了说明该类和宿主类关系密切,而private , static , final 这些可以单独拿出来说,static这个区别比较大,没有static修饰,说明此类必须依赖宿主类的对象;而有static修饰,就不依赖与对象的存在了,类名. 即可,整体类似方法上添加static。private这玩意,完全取决于你是否希望将此类暴露出去;final则是为了标明该类不可继承修改.

而且

使用static就如同你新建了一个JAVA文件,静态内部类不会保持对外部类的引用。如果你的builder需要外部类的引用,那它Build就没有意义了,所以必须加static。

总结

  • 使用 Builder 模式可以解耦,更方便地构造不同的对象
  • Builder 类要用 static 修饰
  • 这里使用了简化的Builder模式,将抽象建造者省略,并且也省略了指导者角色 。

相关链接:http://www.jianshu.com/p/5d9db54892c8

Android Builder模式在开发中的应用的更多相关文章

  1. Builder模式在Java中的应用

    在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成.那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Build ...

  2. 【Android进阶】在开发中Application到底用来做什么

    首先,在一个Android程序中,有且只有一个Application对象,在程序开始跑起来的时候,首先执行Application的onCreate方法,这是一个Android应用的入口,在开发中,我们 ...

  3. Builder模式在Java中的应用(转)

    在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成.那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Build ...

  4. 详细解说Android权限在安卓开发中

    android.permission.ACCESS_CHECKIN_PROPERTIES //允许读写访问”properties”表在checkin数据库中,改值可以修改上传 android.perm ...

  5. 【IE】浏览器模式与文档模式 及其开发中处理方式

    原文:http://blog.csdn.net/neo_liu0000/article/details/7589731 什么是浏览器模式和文本模式? 经常使用IE开发者工具的同学,肯定见过浏览器模式和 ...

  6. 解决使用微软模拟器VS Emulator for Android在VS2017 Xamarin开发中不能调试程序的问题。

    在使用VS2017 XAMARIN调试Android应用程序时,屏幕闪一下,进入不了调试(使用谷歌的模拟器可以调试,但是太慢), 我们现在来解决一下这个问题. 第一步:打开Hyper-V管理器 第二步 ...

  7. Android - Builder模式

    https://github.com/simple-android-framework-exchange/android_design_patterns_analysis/tree/master/bu ...

  8. Java Builder 模式,你搞懂了么?

    加油.png 前言:最近闲来无事的时候想着看看一些平常用的三方库源码,没想到看了之后才知道直接撸源码好伤身体,一般设计优秀的开源库都会涉及很多的设计模式,就比如 android 开发使用频繁的 okH ...

  9. 同事写了一个疯狂的类构造器,我要疯了,Builder 模式都不会么?!

    疯狂的类构造器 最近栈长在做 Code Review 时,发现一段创建对象的方法: Task task = new Task(112, "紧急任务", "处理一下这个任务 ...

随机推荐

  1. Windows Azure Web Site (1) 用户手册

    <Windows Azure Platform 系列文章目录> 下载地址: Web Apps用户手册

  2. [New Portal]Windows Azure Virtual Machine (21) 将本地Hyper-V的VM上传至Windows Azure Virtual Machine

    <Windows Azure Platform 系列文章目录> 本章介绍的内容是将本地Hyper-V的VHD,上传到Azure数据中心,并且保留OS中的内容. 注意:笔者没有执行Syspr ...

  3. “Win10 UAP 开发系列”之主题模式切换

    微软动作真是快,本来想写WP8.1RT系列,结果刚整理了一点就出Win10 UAP了.不过还好RT到Win10的差别还不算太大.前两天参加了Win10开发极客秀,虽然没获奖,不过在韦恩卑鄙的帮助下顺利 ...

  4. [Asp.net 5] DependencyInjection项目代码分析3-Ninject

    Microsoft.Framework.DependencyInjection.Ninject 该工程内部共包含5个类文件,底层使用Ninject实现依赖注入,工程截图如下: 从文件命名可以看出,Ni ...

  5. ASP.NET MVC程序中动态修改form的Action值

    在练习ASP.NET MVC时,为了实现一个小功能,POST数据至服务器执行时,需要动态修改form的action值. 下面Insus.NET列举一个例子来演示它.让它简单,明白易了解. 你可以在控制 ...

  6. C#制作RDLC报表

    报表以前我只做过水晶报表,但是最近发现家里的VS上面居然没有水晶报表,发现水晶报表现在貌似已经不能完全免费的使用了,为了保险起见,就用了VS自带的RDLC报表,用完感觉其实也是够用的嘛~ 建立一RDL ...

  7. 将文本文件(txt)的内容导入到Excel和SQL

    这两天网络上流传14w条12306账号信息的txt文档,下载下来之后发现在txt文档中看和查询内容都不是很方便. 这里我就记录下如何将txt文档导入到excel和SQL的过程. 导入到excel 1. ...

  8. 背水一战 Windows 10 (5) - UI: 标题栏

    [源码下载] 背水一战 Windows 10 (5) - UI: 标题栏 作者:webabcd 介绍背水一战 Windows 10 之 UI 标题栏 示例TitleBarDemo.xaml <P ...

  9. 我整理的PHP 7.0主要新特性

    原文:http://php.net/manual/en/migration70.new-features.php 1.标量参数类型声明 现在支持字符串(string).整型(int).浮点数(floa ...

  10. Java中使用Jedis操作Redis

    使用Java操作Redis需要jedis-2.1.0.jar,下载地址:http://files.cnblogs.com/liuling/jedis-2.1.0.jar.zip 如果需要使用Redis ...