Java设计模式(6)——建造者模式
定义: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)——建造者模式的更多相关文章
- 折腾Java设计模式之建造者模式
		博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ... 
- Java 设计模式之建造者模式(四)
		原文地址:Java 设计模式之建造者模式(四) 博客地址:http://www.extlight.com 一.前言 今天继续介绍 Java 设计模式中的创建型模式--建造者模式.上篇设计模式的主题为 ... 
- java设计模式3——建造者模式
		java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ... 
- Java设计模式之建造者模式(Builder)
		前言: 最近一直在学习okHttp,也对其做了一些整理,okHttp和Retrofit结合大大加速我们的开发效率,源码里面采用了很多设计模式,今天我们来学习一下其中的设计模式之一建造者模式. 建造者模 ... 
- Java设计模式之三 ----- 建造者模式和原型模式
		前言 在上一篇中我们学习了工厂模式,介绍了简单工厂模式.工厂方法和抽象工厂模式.本篇则介绍设计模式中属于创建型模式的建造者模式和原型模式. 建造者模式 简介 建造者模式是属于创建型模式.建造者模式使用 ... 
- Java设计模式之三建造者模式和原型模式
		建造者模式 简介 建造者模式是属于创建型模式.建造者模式使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式.简单的来说就是将一个复杂的东西 ... 
- java设计模式之建造者模式
		学习了设计模式,一直感觉有进步又没有进步,与同学.同事探讨了一下.变化不可能一会就可以的,需要努力坚持.不管进步大小,也不管是否进步,做到勿忘初心,做自己喜欢的事情就好.还有几个设计模式一直没有写,原 ... 
- java设计模式之四建造者模式(Builder)
		工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到 ... 
- java设计模式3.建造者模式、原型模式
		建造者模式 一个产品常有不同的组成部分作为产品的零件,有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用,有些时候,一个对象的一些性质必须按照某个顺序赋值才 ... 
- JAVA设计模式总结—建造者模式
		建造者模式 模式动机与定义  首先建造者模式的动机是为了创建复杂对象,简化传统的创建方法,提高创建的效率和可读性.  像图中的这个例子,用户的需求是驾驶一辆汽车,但是对于用户来说是不需要了解汽车装 ... 
随机推荐
- poj3311 经典tsp问题
			题目的大概意思就是一个人到一些城市送披萨,要求找到一条路径可以遍历每个城市后返回出发点,而且路径距离最短.最后输出最短距离就可以. 注意:每个城市可反复訪问多次. 因为题中明白说了两个城市间的直接可达 ... 
- zz 跟风小结一下孕期~
			http://www.newsmth.net/nForum/#!article/FamilyLife/1754069968 发信人: milkcat (牛奶猫养了一只牛奶猫(*^__^*) 嘻嘻……) ... 
- vCenter 6.5安装
			http://guanjianfeng.com/archives/1160269 最近,VMware发布了vSphere 6.5版本,之前的最新版本为6.0.新版本已经开始试行使用HTML5来管理vS ... 
- docker挂载本地目录和数据卷容器
			1.docker挂载本地目录 docker可以支持把一个宿主机上的目录挂载到镜像里. 交互模式运行docker run -it -v /home/dock/Downloads:/usr/Downloa ... 
- CentOS 6.6下 BCM4312 802.11b/g无线网卡驱动安装
			1.目前www.broadcom.com网站上最新版本为hybrid-v35,但此版本与2.6.32不匹配,无法识别验证密码,搜索网上说是要求升级内核,后根据http://www.dadclab.co ... 
- java 方法(函数)
			所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 一般情况下,定义一个方法的语法是: 其中: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 public.protected.p ... 
- Java 获取字符串长度 length()
			Java 手册 实例: public class Length { public static void main(String[] args) { String str = "hgdfas ... 
- Bootstrap-Plugin:过渡效果(Transition)插件
			ylbtech-Bootstrap-Plugin:过渡效果(Transition)插件 1.返回顶部 1. Bootstrap 过渡效果(Transition)插件 过渡效果(Transition)插 ... 
- git grade 版本下载及安装
			Git 2.11.1x64下载 gradle各版本下载地址 1. Git安装与配置 Gradle 用法总结 
- javascript精髓篇之原型链维护和继承.
			一.两个原型 很多人都知道javascript是原型继承,每个构造函数都有一个prototype成员,通过它就可以把javascript的继承演义的美轮美奂了. 其实啊,光靠这一个属性是无法完成jav ... 
