今天小编来说一下Android中的一种设计模式--建造者模式Builder

绪论:

那么对于Android初级来说,Builder设计模式可能在我们开发中用过的很少,但是我们可能见过,我们经常用的AlterDialog.Builder就是一种建造者模式。那么到底什么是建造者模式呢?下面我们来看看它的标准定义:

定义:

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,同时可以分步的构造每一部分。
看起来比较抽象,也不知道具体是什么意思?下面我举一个例子,通过代码来看看什么是建造者模式

举例:

package com;/*** Created by Hankkin on 15/10/21.*/
public class ImageBean {private int id; //图片idprivate String path;    //图片路径private long size;  //图片大小private String type;    //图片类型public ImageBean() {}public ImageBean(int id, String path, long size, String type) {this.id = id;this.path = path;this.size = size;this.type = type;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getPath() {return path;}public void setPath(String path) {this.path = path;}public long getSize() {return size;}public void setSize(long size) {this.size = size;}public String getType() {return type;}public void setType(String type) {this.type = type;}
}

我们定义了一个ImageBean实体,里面包含id、path、size、type属性,其中还包含空的构造方法和一个包含参数的构造。这样我们在声明这个实体的时候可以给这个实体赋值。

ImageBean ib = new ImageBean(1,"xxxx","54321","jpg");
实体的参数个数少点还好,我们能记住构造的参数,如果这个实体有N个参数呢?我们怎样知道参数的顺序呢?代码的可读性并不高,如果不是你自己写的,别人根本看不懂,即便是自己写的,时间长了的话恐怕我们也都忘了。那么Builder模式就可以解决这种情况。我们可以给ImageBean建立一个Builder:
package com;/*** Created by Hankkin on 15/10/21.*/
public class ImageBean {private int id; //图片idprivate String path;    //图片路径private long size;  //图片大小private String type;    //图片类型public ImageBean() {}public ImageBean(Builder builder) {this.id = builder.id;this.path = builder.path;this.size = builder.size;this.type = builder.type;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getPath() {return path;}public void setPath(String path) {this.path = path;}public long getSize() {return size;}public void setSize(long size) {this.size = size;}public String getType() {return type;}public void setType(String type) {this.type = type;}public static class Builder{private int id;private String path;private long size;private String type;public Builder id(int id){this.id = id;return this;}public Builder path(String path){this.path = path;return this;}public Builder size(long size){this.size = size;return this;}public Builder type(String type){this.type = type;return this;}public ImageBean build(){return new ImageBean(this);}}
}
ImageBean.Builder builder = new ImageBean.Builder();
ImageBean ib = builder.id(11).path("xxx").size(1111).type("jpg").build();

可以看到ImageBean的构造参数改成了这个builder,然后定义了一个和ImageBean一样的Builder,返回值都是builder对象。这就是定义里面说的构造和表示分离,构造是ImageBean中来构造,而显示则在Builder中显示。也就是分布构造每一部分。

以上只是builder设计模式的一种用法

总结:

在以下情况使用Build模式:

1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

2 当构造过程必须允许被构造的对象有不同的表示时。

3 Builder模式要解决的也正是这样的问题:

  当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),

  我们要复杂对象的创建过程和这个对象的表示(展示)分离开来,

  这样做的好处就是通过一步步的进行复杂对象的构建,

  由于在每一步的构造过程中可以引入参数,使得经过相同的步骤创建最后得到的对象的展示不一样。

Android设计模式之建造者模式builder相关推荐

  1. 07、人人都会设计模式:建造者模式--Builder

    PS:转载请注明出处 作者: TigerChain 地址: http://www.jianshu.com/p/300cbb9ee7f2 本文出自 TigerChain 简书 人人都会设计模式 教程简介 ...

  2. C++设计模式之建造者模式(builder)(创建型)

    软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径.设计模式中运用了面向对象编程语言的重要特性:封装.继承.多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累. ...

  3. 一天一个设计模式之建造者模式(Builder)

    建造者模式,属于创建型模式,其目的在于将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 适用情况: • 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. ...

  4. 设计模式之建造者模式(Builder)

    建造者模式原理:建造模式主要是用于产生对象的各个组成部分,而抽象工厂模式则用于产生一系列对象,建造者模式而且要求这些对象的组成部分有序. 代码如下: #include <iostream> ...

  5. Python 设计模式之建造者模式 Builder Pattern

    #引入建造者模式 肯德基的菜单上有 薯条, 鸡腿,鸡翅,鸡米花,可乐,橙汁,火腿汉堡,至尊虾汉堡,牛肉汉堡 , 鸡肉卷等这些单品,也有很多套餐. 比如 套餐1:鸡翅,至尊虾汉堡,可乐,薯条 套餐2:鸡 ...

  6. 设计模式之—建造者模式(Builder)-Java实现

    Builder模式,将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部 表象的产品对象.建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节.建造模式可以 ...

  7. UE4 C++设计模式:建造者模式(Builder Pattern)

    目录 描述 套路 使用场景 优缺点 UE4实践 具体复杂产品-门派角色 抽象建造者-角色构造器 具体建造者-纯阳角色构造器 具体建造者-七秀角色构造器 创建指挥者(Director)-角色创建指挥器 ...

  8. 创建型设计模式之建造者模式(Builder)

    结构 意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 适用性 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 当构造过程必须允许被构造的对象有不 ...

  9. 说说设计模式~建造者模式(Builder)

    建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC ...

最新文章

  1. 南京邮电考研计算机科学大纲,2019年南京邮电大学811数据结构考研大纲
  2. 北京大学崔斌教授组招收图机器学习、AutoML等方向科研实习生
  3. SAP MM 销售订单库存与普通库存之间相互转换过账后对于EBEWH以及MBEWH表的更新...
  4. 参加Google™ Code Jam - 中国编程挑战赛(2)
  5. sql数据库相关语句
  6. Android开发删除短信
  7. 软件接口设计_基于PREEvision的AUTOSAR Adaptive设计——上篇
  8. android leaks工具,Androidx中ImmLeaksCleaner已经解决了InputMethodManager... - 简书
  9. shell实例100例《六》
  10. Java 容器之 Connection栈队列及一些常用
  11. debian之自启动程序
  12. Java推断文本文件编码格式以及读取
  13. 机器学习课程笔记【十一】- 因子分析
  14. linux远程拷贝东西
  15. 科技爱好者周刊:第 75 期
  16. MATHLAB GUI编程简易入门
  17. Java技术实验三 货物进销管理系统
  18. 学习ARM开发(2)
  19. MySql数据库记录相差14小时排错,使用Java访问Mysql数据库时出现时区异常的解决方案
  20. Leetcode小白上线第三十三天

热门文章

  1. 使用R语言获得16S物种丰度
  2. my.资料_副本_破六欲
  3. linux创建目录并修改目录权限
  4. mysql工程师之04 数据类型
  5. 网易智能工作室招实习生啦!
  6. 栈和队列:停车场管理
  7. 详解线性结构和非线性结构
  8. 禅道二次开发发送邮件功能
  9. 5G科普——什么是NFV
  10. @Valid请求400错误解决