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 建造者模式的更多相关文章

  1. Android设计模式——Builder(建造者)模式

    1.建造者模式是一步一步创建一个复杂对象的创建模式.该模式是为了将构建复杂对象的过程和他的部件解耦,使得构建过程和部件表示隔离开. 2.Bulider模式的定义是:将一个复杂对象的构建与它的表示分离, ...

  2. 一天一个设计模式——Builder建造者模式

    一.模式说明 在现实世界中,当我们要构造一个大型工程时(建一个大楼),通常的做法是先建造工程的每个独立部分,然后再逐步构造完成(先打地基,再搭框架,最后逐层累造).在程序设计领域,构造一个复杂的类时( ...

  3. C++设计模式-Builder建造者模式

    作用:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式和AbstractFactory模式在功能上很相似,因为都是用来创建大的复杂的对象,它们的区别是:B ...

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

    一.场景描述 建造者模式同工厂模式.抽象工厂模式一样,用于创建继承类对象. 工厂模式:http://www.cnblogs.com/mahongbiao/p/8618970.html 抽象工厂模式:h ...

  5. 设计模式C++学习笔记之十(Builder建造者模式)

      建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.一段晦涩难懂的文字,实现创建不同表示的方法就是给创建的过程传入创建的参数.详细的还是看代码吧. 10.1.解释 ...

  6. 创建型模式之Builder(建造者)模式

    GitHub地址:https://github.com/zhangboqing/design-mode/tree/master/src/main/java/com/zbq     一.定义 建造者模式 ...

  7. Builder 建造者模式 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. 8、Builder 建造者模式 组装复杂的实例 创造型模式

    1.什么是Builder模式 定义: 将一个复杂对象的构建与表示相分离,使得同样的构建过程可以创建不同的表示.大白话就是,你不需要知道这个类的内部是什么样的,只用把想使用的参数传进去就可以了,达到了解 ...

  9. js原生设计模式——6复杂对象的构建—Builder建造者模式

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

随机推荐

  1. Python3.X与urllib

    在Python3.X中使用urllib时,不能像Python2.X一样直接使用: import urllib response = urllib.urlopen("http://www.ba ...

  2. cygwin编译ffmpeg移植到android平台问题集锦

    编译环境: windows xp Cygwin 1.1.3.1 NDK r9 1.提示各种command not found 比如 ./config.sh: line 6: $'--arch=arm\ ...

  3. javabean 简介

    javabean其实包含多个方面的含义.   Java语言开发的可重用组件 优点:1,代码简洁.2,HTML与Java分离,好维护.3,将常用程序写成可重用组件,避免重复.   特点:1,所有类放在同 ...

  4. SPSS问题

    1.SPSS中变量视图里的度量标准的三个选项是什么意思 Nominal名义变量是对数据进行分类得到的变量,如按性别分为男女,按年龄分为老.中.青: Ordinal顺序变量是对数据进行排序得到的变量,如 ...

  5. 正则表达式:根据逗号解析CSV并忽略引号内的逗号

    需求:解析CSV文件并忽略引号内的逗号 解决方案: public static void main(String[] args) { String s = "a,b,c,\"1,0 ...

  6. Parallax

    常听说牛人都是jquery插件用得很好的人. 现在有了github,英文过关的话什么好东西下不到啊,再不用去浏览那些抄来抄去骗人看广告的垃圾网站了. 扯远点,本人有严重的熊猫眼,所以用一种叫倦眼充电棒 ...

  7. cf B Very Beautiful Number

    题意:给你两个数p和x,然后让你找出一个长度为p的数,把它的最后移到最前面之后得到的数是原来数字的x倍,有很多这样的数取最小. 思路:枚举最后一位,然后就可以推出整个的一个数,然后比较得到的数的第一个 ...

  8. Zabbix的集中式监控

    相对于传统的ZABBIX硬件系统级监控(CPU,内存,硬盘,网卡),应用级的监控就显得有些复杂了. 如果对不同的应该来不同的应用,配置会很多的. 如果我们能在一个指定的AGENT上监控所有的APACH ...

  9. Gap Locks 区间锁

    Gap Locks 区间锁 1. 区间锁不能用于语句锁定记录使用一个唯一索引来搜索一个唯一的记录 2.READ COMMITTED 没有区间锁 区间锁是一个锁在一个在index记录间的区间,或者一个l ...

  10. common tar command

    Compress tar -cvzf jy2653.2.tgz jy2653.2 Decompress tar -xvf jy2653.1.tgz