定义:Builder模式也叫建造者模式或者生成器模式,Builder模式是一种对象创建型模式之一,用来隐藏复合对象(对象的属性为另一个对象的引用)的创建过程,它把复合对象的创建过程交给Builder,通过Director来指导Builder创建对象。

一、模式中包含的角色及其职责

  • 产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。
  • 抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品
  • 建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品、返回组建好的产品
  • 导演类:负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。

二、Demo

产品类

/**
*@desc 房子 复合对象
*@auther yangshijing
*@date 2018-3-20
*/
public class House {
/**
* 地板,此应该为另一个对象的引用,为了更好理解建造者模式,这里简化为String类型
*/
private String floor;
// 墙
private String wall;
// 屋顶
private String housetop; public String getFloor() {
return floor;
} public void setFloor(String floor) {
this.floor = floor;
} public String getWall() {
return wall;
} public void setWall(String wall) {
this.wall = wall;
} public String getHousetop() {
return housetop;
} public void setHousetop(String housetop) {
this.housetop = housetop;
} }

抽象建造者

/*
* 工程队,两个方法,建造产品,返回产品
*/
public interface HouseBuilder {
//修地板
public void makeFloor();
//修墙
public void makeWall();
//修屋顶
public void makeHousetop();
   //返回产品
public House getHouse();
}

建造者

/*
* 平房工程队
*/
/**
*@desc 平房建造者
*@auther yangshijing
*@date 2018-3-20
*/
public class PingFangBuilder implements HouseBuilder {
House house = new House();
public void makeFloor() {
house.setFloor("平房-->地板");
}
public void makeHousetop() {
house.setHousetop("平房-->房顶");
}
public void makeWall() {
house.setWall("平房-->墙");
}
public House getHouse() {
return house;
} }
/**
*@desc 公寓建造者
*@auther yangshijing
*@date 2018-3-20
*/
public class GongyuBuilder implements HouseBuilder{
House house = new House(); public House getHouse() {
return house;
} public void makeFloor() {
house.setFloor("公寓-->地板");
} public void makeHousetop() {
house.setHousetop("公寓-->房顶");
} public void makeWall() {
house.setWall("公寓-->墙");
} }

导演类

public class HouseDirector {
/**
   *指导建造者创建产品
   */
public void makeHouse(HouseBuilder builder) {
builder.makeFloor();
builder.makeWall();
builder.makeHousetop();
} }

测试类

public class MainClass {

    public static void main(String[] args) {
     //调用者只需创建Builder 和Director,如果想要生产不同的产品,只需创建不同的Builder实现类
HouseBuilder builder = new GongyuBuilder();
HouseDirector director = new HouseDirector();
director.makeHouse(builder); House house = builder.getHouse();
System.out.println(house.getFloor());
System.out.println(house.getWall());
System.out.println(house.getHousetop());
} }

三、UML类图

Java设计模式(6)——建造者模式的更多相关文章

  1. 折腾Java设计模式之建造者模式

    博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...

  2. Java 设计模式之建造者模式(四)

    原文地址:Java 设计模式之建造者模式(四) 博客地址:http://www.extlight.com 一.前言 今天继续介绍 Java 设计模式中的创建型模式--建造者模式.上篇设计模式的主题为 ...

  3. java设计模式3——建造者模式

    java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ...

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

    前言: 最近一直在学习okHttp,也对其做了一些整理,okHttp和Retrofit结合大大加速我们的开发效率,源码里面采用了很多设计模式,今天我们来学习一下其中的设计模式之一建造者模式. 建造者模 ...

  5. Java设计模式之三 ----- 建造者模式和原型模式

    前言 在上一篇中我们学习了工厂模式,介绍了简单工厂模式.工厂方法和抽象工厂模式.本篇则介绍设计模式中属于创建型模式的建造者模式和原型模式. 建造者模式 简介 建造者模式是属于创建型模式.建造者模式使用 ...

  6. Java设计模式之三建造者模式和原型模式

    建造者模式 简介 建造者模式是属于创建型模式.建造者模式使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式.简单的来说就是将一个复杂的东西 ...

  7. java设计模式之建造者模式

    学习了设计模式,一直感觉有进步又没有进步,与同学.同事探讨了一下.变化不可能一会就可以的,需要努力坚持.不管进步大小,也不管是否进步,做到勿忘初心,做自己喜欢的事情就好.还有几个设计模式一直没有写,原 ...

  8. java设计模式之四建造者模式(Builder)

    工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到 ...

  9. java设计模式3.建造者模式、原型模式

    建造者模式 一个产品常有不同的组成部分作为产品的零件,有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用,有些时候,一个对象的一些性质必须按照某个顺序赋值才 ...

  10. JAVA设计模式总结—建造者模式

    建造者模式 模式动机与定义 ​ 首先建造者模式的动机是为了创建复杂对象,简化传统的创建方法,提高创建的效率和可读性. ​ 像图中的这个例子,用户的需求是驾驶一辆汽车,但是对于用户来说是不需要了解汽车装 ...

随机推荐

  1. 《DSP using MATLAB》示例 Example 10.2

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  2. hadoop YARN配置参数剖析—MapReduce相关参数

    MapReduce相关配置参数分为两部分,分别是JobHistory Server和应用程序参数,Job History可运行在一个独立节点上,而应用程序参数则可存放在mapred-site.xml中 ...

  3. linux下配置python环境 django创建helloworld项目

    linux下配置python环境 1.linux下安装python3 a. 准备编译环境(环境如果不对的话,可能遇到各种问题,比如wget无法下载https链接的文件) yum groupinstal ...

  4. jeecms一些经典标签

    http://www.121ask.com/thread-5512-1.html [@cms_channel_list]标签详细介绍 http://www.jeecmstheme.com/2014/0 ...

  5. Web service 框架比较CXF xfire aisx2 aisx

    Web 服务框架.它还体现了从 Axis 1.x 系列获得的经验和最近两年在 Web 服务领域的发展.推出 Axis2 的主要原因之一是从速度和内存方面获得更好的性能——不过还添加了一些新特性和功能. ...

  6. java 输出helloword

    1,安装jdk;2,配置环境变量;3,新建D:/Test.java文件;4,文件内容如下:public class Test{ public static void main(String[] arg ...

  7. appium启动APP时避免重新安装的问题

    from appium import webdriverfrom time import sleepimport os #获取apk的绝对路径desired_cups = {}#设备平台desired ...

  8. codeforce1029B B. Creating the Contest(简单dp,简单版单调栈)

    B. Creating the Contest time limit per test 1 second memory limit per test 256 megabytes input stand ...

  9. 线程的等待方法:join

    其实多线程最复杂的地方在于不同线程间的同步问题,这其中会涉及到先后执行问题.共享变量问题等.这篇文章我们主要来开个头,看一下join方法. using System; using System.Thr ...

  10. 「小程序JAVA实战」小程序搜索功能(55)

    转自:https://idig8.com/2018/09/23/xiaochengxujavashizhanxiaochengxusousuogongneng54/ 通过用户搜索热销词,将热销词添加到 ...