引出建造者模式:

package com.disign.build;

/**
* Created by zhen on 2017-05-19.
*/
public class BuildPersonTest {
/**
* 吃面,面的口味与厨师的心情等关联引出:
* 抽象不应该依赖于细节,细节应该依赖于抽象,吃的菜不能依赖于厨师的细节。
* 构建小人
* 防止哪次构建的时候小人少了哪个必要组件,应该使用抽象继承
*/
public static void main(String[] args){ Person thin = BuildPerson.build(new ThinPerson());
Person fat = BuildPerson.build(new FatPerson());
} }
class BuildPerson{ public static Person build(Person person){
person.buildHead();
person.buildBody();
person.buildArmLeft();
person.buildArmRight();
person.buildLegLeft();
person.buildLegRight();
return person;
} }
abstract class Person{
abstract void buildHead();
abstract void buildBody();
abstract void buildArmLeft();
abstract void buildArmRight();
abstract void buildLegLeft();
abstract void buildLegRight();
}
class FatPerson extends Person{
@Override
void buildHead() { } @Override
void buildBody() { } @Override
void buildArmLeft() { } @Override
void buildArmRight() { } @Override
void buildLegLeft() { } @Override
void buildLegRight() { }
}
class ThinPerson extends Person{
@Override
void buildHead() { } @Override
void buildBody() { } @Override
void buildArmLeft() { } @Override
void buildArmRight() { } @Override
void buildLegLeft() { } @Override
void buildLegRight() { }
}

我们上面的代码就用到了建造者模式。

建造小人的过程是稳定的,都需要头身手脚,具体建造的细节不同,有高矮胖瘦。但是对于用户而言,我只告诉你,我需要一个胖小人,我们应该在保证一个正常人的前提下对人的细节进行修饰。

如果你需要将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示意图的时候,我们可以使用建造者模式,又叫生成器模式。如果我们用了建造者模式,用户只需要指定需要建造的类型就可以得到他们,具体的建造的过程和细节就不需要知道了。

建造者模式Builder,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

图中Builder是什么?

为创建一个Product对象各个部件指定的抽象接口。

ConcreteBuilder是什么?

具体创造的,实现Builder接口,构造和装配各个部件。

Product是什么?

具体的小人,产品角色。

Director是什么?

指挥者,用来根据用户需求构建小人对象,是一个使用Builder接口的对象

什么时候使用构建者模式呢?

用于创建一些复杂的对象,这些对象内部构建之间的构造顺序通常是非常稳定的,单对象内部的构建通常面临着复杂的变化

构造者模式的好处就是使得构造代码与表示代码分离,由于构造者隐藏了该产品是如何组装的,所以弱需要改变一个产品的内部表示,只需要再定一个具体的建构者就可以了。

基本代码:

public class BuildProductTest {
public static void main(String[] args){
Director director = new Director();
BuilderProduct builderProduct1 = new ConcreteBuilder1();
BuilderProduct builderProduct2 = new ConcreteBuilder2(); director.construct(builderProduct1);
Product p1 = builderProduct1.getResult();
p1.show(); director.construct(builderProduct2);
Product p2 = builderProduct2.getResult();
p2.show();
}
}
class Product{
List<String> parts = new ArrayList<String>();
public void add(String part){
parts.add(part);
}
public void show(){
for (String part: parts) {
System.out.println(part);
}
}
}
abstract class BuilderProduct{
public abstract void buildPartA();
public abstract void buildPartB();
public abstract Product getResult();
}
class ConcreteBuilder1 extends BuilderProduct{
@Override
public void buildPartA() { } @Override
public void buildPartB() { } @Override
public Product getResult() {
return null;
}
}
class ConcreteBuilder2 extends BuilderProduct{
@Override
public void buildPartA() { } @Override
public void buildPartB() { } @Override
public Product getResult() {
return null;
}
}
class Director{
public void construct(BuilderProduct builder){
builder.buildPartA();
builder.buildPartB();
}
}

建构者模式是在当创建复杂对象的算法应该独立于该对象的组成以及它们的装配方式时使用的模式。

建造者模式 build的更多相关文章

  1. 设计模式01 创建型模式 - 建造者模式(Build Pattern)

    参考 1. Builder Design Pattern | Youtube 2. 建造者模式(Builder和Director)| 博客园 3. 深入理解Builder模式 | 简书 建造者模式(B ...

  2. 建造者模式(build pattern)-------创造型模式

    将一个复杂对象的构建与它的标示分离,使得同样的构建过程可以创建不同的标示. 建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内 ...

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

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

  4. 设计模式--建造者模式Builder(创建型)

    一.首先看建造者模式的UML图: 二.再来看一个建造者模式的例子 class Builder { public: virtual void BuildHead() {} virtual void Bu ...

  5. C#设计模式系列:建造者模式(Builder)

    1.建造者模式简介 1.1>.定义 建造者模式(Builder)将复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. 1.2>.使用频率 中低 1.3>.原型模式应用 ...

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

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

  7. java 建造者模式

    package de.bvb.test3; /** * 建造者模式: 假如一个类有4个字段,每个字段或者每几个字段的组合都需要设置为构造函数,构造函数就比较麻烦 * 而且如果再加一个字段进去也不好拓展 ...

  8. 六个创建模式之建造者模式(Builder Pattern)

    定义: 将一个复杂的对象的构建与它的表示分类,使得同样的构建过程可以创建不同的表示.建造者模式一步步地创建一个复杂对象,但用户仅需指定对象的类型和内容,不需要关心各个部分之间的关联关系. 结构图: B ...

  9. 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

    本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...

随机推荐

  1. 设置UCHome注册登陆退出的跳转页自定义

    UCHome 默认注册.登录成功后跳转到 http://www.xxx.com/home/space.php?do=home 退出后会跳转到站点的首页,即 http://www.xxx.com/hom ...

  2. centos 配置redis

    一.配置redis 简介:Redis是使用c语言开发的一个高性能键值数据库.Redis可以通过一些键值类型来存储数据. 下载:官网地址:http://redis.io/ 下载地址:http://dow ...

  3. 在一台server上部署多个Tomcat

    版权声明: https://blog.csdn.net/u011518709/article/details/27181665 在一台server上配置多个Tomcat的方法: 这几天因为在研究OGS ...

  4. 本地项目提交到github或者gitlab

    在 gitlab中创建新项目 创建好之后会生成一个.Git路径 切换回本地工程文件目录 右键 点击git bash 在git bash 里面执行git init 初始化 git add . 提交当前 ...

  5. centos 相关

    运行locate httpd.conf,提示-bash: locate: command not found错误.则需要安装mlocate软件包: yum install mlocate 搜索,提示l ...

  6. 23TCP通信

    .pro 文件中加入:QT+=network 在Qt中实现TCP/IP服务器端通信的流程: 1.创建监听套接字,QTcpServer 2.将监听套接字设置为监听模式, listen 3.等待并接受客户 ...

  7. 《Java从入门到放弃》JavaSE入门篇:变量

    变量是什么玩意呢? 变量,顾名思义就是能变化的量 - - 好吧,举个栗子. 图片上的各种餐具,就是变量,因为同一个盘子可以在不同的时间装不同的菜,在这一桌可以装土豆肉丝,在下一桌可以装清炒黄瓜(当然, ...

  8. 图解Kerberos认证工作原理

    本文是我在看了这篇英文说明之后的总结 https://technet.microsoft.com/zh-cn/library/cc961976.aspx 是总结,不是翻译,所以是我看后按自己的理解写的 ...

  9. Python3:sqlalchemy对sybase数据库操作,非sql语句

    Python3:sqlalchemy对sybase数据库操作,非sql语句 # python3 # author lizm # datetime 2018-02-01 10:00:00 # -*- c ...

  10. 20145326《Java程序设计》实验二Java面向对象程序设计实验报告

    20145326<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...