版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/u013132758。 https://blog.csdn.net/u013132758/article/details/78764592

前言

具体介绍Builder设计模式之前,首先我们想一个问题。前段时间双十一室友组了台电脑,我们都知道电脑是一个非常复杂的组合体,里面有好多元件(CPU,硬盘,显示器,电源,显卡等等),不同的人对自己电脑的配置要求不同,但是得到的结果都是不同配置的一台电脑,那么这个过程怎么样封装使组件之间的耦合度降到最低,同时方便扩展。这时候就用到builder设计模式了。

一、Builder设计模式的使用场景

1、多个元件可以组装到一个对象里面,但是得到的结果又不相同时。

2、相同的方法,不同的执行顺序,但是产生的执行结果或作用不同时。

3、初始化一个非常复杂的对象,但是参数特别的而且还都有默认值。

二、Builder设计模式的定义

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

三、Builder设计模式的UML图

四、Builder设计模式的简单实现(以组装电脑为例)

/*** 电脑抽象类* Created by leiqi on 2017/11/29.*/public abstract class Cumputer {protected static String mBoard;//硬盘protected static String mOS;//系统protected static String mDisplay;//显示器protected static String mGraphics;//显卡protected static String mCPU;//CPUprotected static String mPower;//电源public Cumputer(){};public static void setmBoard(String mBoard) {Cumputer.mBoard = mBoard;}public static void setmDisplay(String mDisplay) {Cumputer.mDisplay = mDisplay;}public static void setmGraphics(String mGraphics){Cumputer.mGraphics = mGraphics;}public static void setmCPU(String mCPU){Cumputer.mCPU = mCPU;}public static void setmPower(String mPower){Cumputer.mPower = mPower;}public abstract void  setmOs();@Overridepublic String toString(){return "This Cumputer is ["+"\n\t\t\t硬盘:"+mBoard+"\n\t\t\t显示器:"+mDisplay+"\n\t\t\t系统:"+mOS+"\n\t\t\t显卡:"+mGraphics+"\n\t\t\tCPU:"+mCPU+"\n\t\t\t电源:"+mPower+"\n\t\t]";}}

上面时电脑的抽象类,除此外我们还需要有:

/*** Created by leiqi on 2017/10/29.*/public class MacBookAir extends Cumputer {protected MacBookAir(){}@Overridepublic void setmOs() {mOS = "(黑苹果)MAC OS 11.0";}
}
/*** Created by leiqi on 2017/10/29.*/public abstract class Builder {protected abstract void buildBoard(String board);protected abstract void buildDisplay(String display);protected abstract void buildOS();protected abstract void buildCPU(String cpu);protected abstract void buildGraphic(String graphic);protected abstract void buildPower(String power);protected abstract Cumputer create();
}
/*** Created by leiqi on 2017/10/29.*/public class MacBookAirBuilder extends Builder {private Cumputer cumputer = new MacBookAir();@Overrideprotected void buildBoard(String board) {cumputer.setmBoard(board);}@Overrideprotected void buildDisplay(String display) {cumputer.setmDisplay(display);}@Overrideprotected void buildOS() {cumputer.setmOs();}@Overrideprotected void buildCPU(String cpu) {cumputer.setmCPU(cpu);}@Overrideprotected void buildGraphic(String graphic) {cumputer.setmGraphics(graphic);}@Overrideprotected void buildPower(String power) {cumputer.setmPower(power);}@Overrideprotected Cumputer create() {return cumputer;}
}
/*** Created by leiqi on 2017/10/29.*/public class Director {Builder mbuider;public Director(Builder builder){mbuider = builder;}public void contruct(String board,String display,String cpu,String graphic,String power){mbuider.buildBoard(board);mbuider.buildDisplay(display);mbuider.buildCPU(cpu);mbuider.buildGraphic(graphic);mbuider.buildPower(power);mbuider.buildOS();}
}

使用时只需要传入不同参数即可:

/*** Created by leiqi on 2017/12/10.*/public class Test {public static void main(String[] args) {MacBookAirBuilder bookAirBuilder = new MacBookAirBuilder();new Director(bookAirBuilder).contruct("三星固态硬盘", "三星显示器", "英特尔i7处理器", "NVIDIA", "金河田");System.out.print(bookAirBuilder.create().toString());}
}

以上的输出结果如下:

五、Builder模式在Android中的使用

Builder设计模式在Android中的使用也是比较常见的,其中最为典型的该属于AlterDialog,其次网络请求框架,Okhttp和Retrofit也是使用Builder设计模式。

[Andriod设计模式之旅]——Builder模式相关推荐

  1. PrintJ的设计模式之旅——1.模式之父

    好奇设计模式的源头,做了一番搜索和调查,于是便开启了这个系列"PrintJ的设计模式之旅". 1.模式之父 GOF(Gang of Four) Erich Gamma.Richar ...

  2. Java设计模式之建造者Builder模式代码示例

  3. Android常考问题(8)-设计模式:Builder模式(顺带学习了一下String的比较和final)

    今天的主要目的是学习设计模式中的Builder模式.由于java基础不牢固,在学习过程中要回过头去学习java内容,因此凑成了这样一篇驳杂的文章. Builder模式 首先是Builder设计模式的作 ...

  4. 我的设计模式之旅(4)——生成器(建造者)模式Builder

    Builder模式也是创建型模式中的一种.主要用来应对构成复杂但构成结构和顺序相对稳定的对象的创建工作.目的是省去在对象发生变化时,需要修改代码中每一处对象创建的地方,应用这种模式,可以在一个复杂对象 ...

  5. 基于设计模式的学习之旅-----访问者模式(附源码)

    基于设计模式的学习之旅-----访问者模式 1.初始访问者模式 2.什么是访问者模式 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 3.模 ...

  6. 设计模式-Builder模式

    目录 一个例子(做汤) 人工做汤 机器做汤(使用Builder模式) 优缺点 优点 缺点 Builder模式属于创建型模式. 它是将一个复杂对象的构建过程隐藏起来,让使用者只关系自己要生成什么样的对象 ...

  7. java设计模式4--建造者模式(Builder)

    本文地址:http://www.cnblogs.com/archimedes/p/java-builder-pattern.html,转载请注明源地址. 建造者模式 将一个复杂对象的构建与它的表示分离 ...

  8. Java设计模式——Builder模式

    前言 之前写Android程序的时候,经常会用到Dialog(对话框)这个控件.我们在使用Dialog,比如AlertDialog的时候就用到了这里要说明的Builder模式.现在我们来看一下这样的一 ...

  9. Android设计模式之——Builder模式

    一.介绍 Builder模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程.该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程 ...

最新文章

  1. 为什么分布式一定要有延时任务?
  2. html5shiv.js和respond.min.js的作用
  3. 【Java系列】从JVM角度解析Java核心类String的不可变特性
  4. WIFI搜索的到别人,却找不到自己家的wifi
  5. 【Python】【入门】一文带你掌握Python27入门 ~
  6. 实现权限控制_Spring自定义注解+AOP实现权限控制
  7. python local variable_python学习笔记 - local, global and free variable
  8. Redis在生产中不得不重视的几个运维问题
  9. 打破云原生时代存储瓶颈,SmartX 发布 K8s 云原生存储 IOMesh
  10. node 获取表单数据 为空_像声明类型一样写表单——基础功能
  11. mysql sdi_MySQL 8.0新特性: 数据字典
  12. android阴影分割线,android shape的使用及渐变色、分割线、边框、半透明阴影
  13. 数据结构经典案例_计算机领域必读的经典书籍清单
  14. python dataframe取行列_pandas DataFrame 行列索引及值的获取的方法
  15. 业务,大数据监控平台搭建
  16. 电脑开机就进入bios的解决方法
  17. [ html5 ] 图片默认外边框
  18. Docker学习笔记(2)--Docker常用命令
  19. MySQL SQL语句练习题
  20. bzoj4668: 冷战

热门文章

  1. Nginx学习笔记3:Shell脚本检测Nginx服务状态
  2. ELK logstash 处理MySQL慢查询日志
  3. Ubuntu中rsync配合inotify做服务器间文件同步
  4. postgres建表
  5. E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
  6. BAJT 中高级 Java 面试题答案
  7. html的版本适配,2.1.3 HTML 5确保了与之前HTML版本的兼容性
  8. MyBatis的一级缓存、二级缓存演示以及讲解,序列化异常的处理
  9. 触发器报错“Not allowed to return a result set from a trigger”的解决方案
  10. opencv 解决ippicv下载失败问题ippicv_2019_lnx_intel64_general_20180723.tgz离线下载