Builder 建造者模式
Markdown版本笔记 | 我的GitHub首页 | 我的博客 | 我的微信 | 我的邮箱 |
---|---|---|---|---|
MyAndroidBlogs | baiqiantao | baiqiantao | bqt20094 | baiqiantao@sina.com |
目录
建造者模式
简介
建造者模式的概念:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以有不同的表示。
大概的意思,就是一套的构建过程可以有不同的产品(表示)出来。这些产品(表示)都按照这一套的构建过程被生产出来。
建造者模式通常包括以下这几个角色:
- Builder:给出一个抽象接口,规范建造者对于生产的产品的各个组成部分的建造。这个接口只是定一个规范,不涉及具体的建造,具体的建造让继承于它的子类去实现。
- ConcreteBuilder:实现builder接口,针对不同的业务逻辑,具体化各类型对象各个组成部分的建造,最后返回一个建造好的产品。
- Director:导演,顾名思义,负责规范流程之用。在指导中不涉及产品的创建,只负责保证复杂对象各部分被创建或按某种
顺序
创建。 - Product:要构造的复杂对象。
定义了一个新的类来构建另一个类的实例,以简化复杂对象的创建。建造模式通常也使用方法链接来实现。
java.lang.StringBuilder#append()
作用:
- 将构造逻辑提到单独的类中
- 分离类的构造逻辑和表现
案例
一个被构造的复杂对象。
public class Productor {
public String head;
public String body;
public String foot;
//...
}
抽象的Builder,为创建一个Product对象的各个部件指定抽象接口。
public interface IBuilder {
void buildHead();
void buildBody();
void buildFoot();
Productor buildPerson();
}
具体的建造者
对于客户端而言,只需要关心具体的建造者,无需关心产品内部构建流程。
如果客户端需要其他的复杂产品对象,只需要选择其他的建造者即可;也即,如果后续需要扩展,则只需要添加一个新的builder就行。
//具体的建造者。实现Builder接口以构造和装配该产品的各个部件。
public class ConcreteBuilder implements IBuilder {
Productor person;
public ConcreteBuilder() {
person = new Productor();
}
// 在此创建出部件
public void buildBody() {
System.out.println( "在这里根据客户端的需要建造男人的身体");
person.body = "身体";
}
public void buildFoot() {
System.out.println( "在这里根据客户端的需要建造男人的脚");
person.foot = "脚";
}
public void buildHead() {
System.out.println( "在这里根据客户端的需要建造男人的头");
person.head = "头";
}
// 返回复杂产品对象
public Productor buildPerson() {
return person;
}
}
导演,负责流程规范,在导演类中可以注入建造者对象。
public class Director {
private IBuilder builder;
public Director(IBuilder builder) {
this.builder = builder; // 构造方法中传递builder
}
// 这个方法用来规范流程,产品构建和组装方法
public Productor construct() {
builder.buildHead();
builder.buildBody();
builder.buildFoot();
return builder.buildPerson();
}
}
客户端使用
public class Test {
public static void main(String[] args) {
IBuilder builder = new ConcreteBuilder(); //具体的建造者
Director director = new Director(builder); //把建造者注入导演
Productor person = director.construct(); //导演负责流程把控
System.out.println(person.body);
}
}
2016-10-31
Builder 建造者模式的更多相关文章
- Android设计模式——Builder(建造者)模式
1.建造者模式是一步一步创建一个复杂对象的创建模式.该模式是为了将构建复杂对象的过程和他的部件解耦,使得构建过程和部件表示隔离开. 2.Bulider模式的定义是:将一个复杂对象的构建与它的表示分离, ...
- 一天一个设计模式——Builder建造者模式
一.模式说明 在现实世界中,当我们要构造一个大型工程时(建一个大楼),通常的做法是先建造工程的每个独立部分,然后再逐步构造完成(先打地基,再搭框架,最后逐层累造).在程序设计领域,构造一个复杂的类时( ...
- C++设计模式-Builder建造者模式
作用:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式和AbstractFactory模式在功能上很相似,因为都是用来创建大的复杂的对象,它们的区别是:B ...
- Java设计模式(四)Builder建造者模式
一.场景描述 建造者模式同工厂模式.抽象工厂模式一样,用于创建继承类对象. 工厂模式:http://www.cnblogs.com/mahongbiao/p/8618970.html 抽象工厂模式:h ...
- 设计模式C++学习笔记之十(Builder建造者模式)
建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.一段晦涩难懂的文字,实现创建不同表示的方法就是给创建的过程传入创建的参数.详细的还是看代码吧. 10.1.解释 ...
- 创建型模式之Builder(建造者)模式
GitHub地址:https://github.com/zhangboqing/design-mode/tree/master/src/main/java/com/zbq 一.定义 建造者模式 ...
- Builder 建造者模式 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 8、Builder 建造者模式 组装复杂的实例 创造型模式
1.什么是Builder模式 定义: 将一个复杂对象的构建与表示相分离,使得同样的构建过程可以创建不同的表示.大白话就是,你不需要知道这个类的内部是什么样的,只用把想使用的参数传进去就可以了,达到了解 ...
- js原生设计模式——6复杂对象的构建—Builder建造者模式
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
随机推荐
- 连接MySQL数据常见问题
错误信息1 :ERROR 1045 (28000): Access denied for user 'usera'@'localhost' (using password:YES) 错误信息2 :ER ...
- Zephyr-开发流程
开发流程 前提1:检查你的Linux主机满足入门指南中规定的最低要求. 具体请参考 : 物联网操作系统-Zephyr 前提2: 确保SDK的环境变量和zephyr项目的环境变量. 终端执行: $ e ...
- while死循环问题-输入字符就会死循环
问题: 是否会遇到这样的问题,在while循环中 sanf("%d",&a);如果输入的不是数字,是字符就会进入死循环. 解决方案:都是缓冲区惹的祸,输入字符后,字符会一直 ...
- Caption,Text,WindowText的区别——TControl也有FText,是为了模拟一个窗口
TControl = class(TComponent) // 控件的Windows功能从TControl开始 property Caption: TCaption read GetText writ ...
- 海量日志数据提取某日访问百度次数最多的那个IP的Java实现
海量日志数据提取某日访问百度次数最多的那个IP的Java实现 前几天在网上看到july的一篇文章<教你如何迅速秒杀掉:99%的海量数据处理面试题>,里面说到百度的一个面试题目,题目如下: ...
- java学习之常量与进制
java中的常量包括以下几类: 1.整型常量,比如:3,5,89,99 2.浮点型常量:比如1.23,5.98,3.1415926 3,字符常量:'a','c','1'(需要注意的一点是字符常量只能包 ...
- (转载)php数组删除元素各种方法总结
(转载)http://www.111cn.net/phper/php/46865.htm 有很多朋友都不知道怎么把数组中元素给删除,下面我来总结各种数组删除元素方法给各位,有需要了解的朋友可进入参考. ...
- WebBrowser控件默认使用IE9,IE10的方法
1,打开注册表 HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER) SOFTWARE Microsoft Internet E ...
- LA 3263 欧拉定理
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- UVa 11178计算几何 模板题
#include<cstdio> #include<cstring> #include<cmath> #include<iostream> #inclu ...