Builder 建造者模式 MD
| 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 建造者模式 MD的更多相关文章
- Android设计模式——Builder(建造者)模式
1.建造者模式是一步一步创建一个复杂对象的创建模式.该模式是为了将构建复杂对象的过程和他的部件解耦,使得构建过程和部件表示隔离开. 2.Bulider模式的定义是:将一个复杂对象的构建与它的表示分离, ...
- 一天一个设计模式——Builder建造者模式
一.模式说明 在现实世界中,当我们要构造一个大型工程时(建一个大楼),通常的做法是先建造工程的每个独立部分,然后再逐步构造完成(先打地基,再搭框架,最后逐层累造).在程序设计领域,构造一个复杂的类时( ...
- C++设计模式-Builder建造者模式
作用:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式和AbstractFactory模式在功能上很相似,因为都是用来创建大的复杂的对象,它们的区别是:B ...
- Builder 建造者模式
简介 建造者模式的概念:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以有不同的表示. 大概的意思,就是一套的构建过程可以有不同的产品(表示)出来.这些产品(表示)都按照这一套的构建过程被 ...
- 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 一.定义 建造者模式 ...
- 8、Builder 建造者模式 组装复杂的实例 创造型模式
1.什么是Builder模式 定义: 将一个复杂对象的构建与表示相分离,使得同样的构建过程可以创建不同的表示.大白话就是,你不需要知道这个类的内部是什么样的,只用把想使用的参数传进去就可以了,达到了解 ...
- js原生设计模式——6复杂对象的构建—Builder建造者模式
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
随机推荐
- BoneBlack am335x利用SD卡烧写板卡上的emmc
参考ti论坛上面的一篇文章: 链接:https://pan.baidu.com/s/1SLSUbCRrIULJJf_BNI3sEQ 密码: hvem 自己稍微修改的debrick.sh 链接: htt ...
- TRUNCATE can't with condition
No, TRUNCATE is all or nothing. You can do a DELETE FROM <table> WHERE <conditions> but ...
- string rune byte 的关系
在Go当中 string底层是用byte数组存的,并且是不可以改变的. 例如 s:="Go编程" fmt.Println(len(s)) 输出结果应该是8因为中文字符是用3个字节存 ...
- python opencv3 cornerHarris 角点检测
git:https://github.com/linyi0604/Computer-Vision 角点也是处在一个无论框框往哪边移动 框框内像素值都会变化很大的情况而定下来的点 如果框框水平方向上移动 ...
- (Nginx和PHP下)URL重写,TP实现URL重写
UrlRewrite就是我们通常说的地址重写,用户得到的全部都是经过处理后的URL地址. 优点 一:提高安全性,可以有效的避免一些参数名.ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的话 ...
- hdu 2266 dfs
题意:在数字之间添加运算符号,使得结果等于题目中要求的Sample Input123456789 321 1Sample Output181 这题虽然看起来比较简单,但是之前和差的状态不太好表示,因此 ...
- Codeforces Round #349 (Div. 1) A. Reberland Linguistics 动态规划
A. Reberland Linguistics 题目连接: http://www.codeforces.com/contest/666/problem/A Description First-rat ...
- bestcoder#23 1002 Sequence II 树状数组+DP
Sequence II Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Sql 先进先出计算积分
先建表,插入测试数据 --正积分表 CREATE table tb1 ( ) NOT NULL, ) NOT NULL, ) NULL, [point] [int] NULL ) ) ) ) ) ) ...
- C# 高级编程9 第30章MEF C#可扩展编程之MEF第2章(抄录)
Managed Extensibility Framework (MEF) 什么是 MEF? Managed Extensibility Framework 即 MEF 是用于创建轻量.可扩展应用 ...