文档章节

建造者模式

职业搬砖20年
 职业搬砖20年
发布于 06/21 16:07
字数 767
阅读 4
收藏 0

1、工厂模式中创建的对象大都是简单的对象

  • 复杂的产品类并且拥有不同的属性特点的管理就需要用到建造者模式

2、建造者模式:

  • 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的标识
  • 用户只需指定需要创建的类型就得到它们,至于具体建造的过程和细节就不知道了

提供产品类:

public class Product {
    /**
     * 定义一些关于产品的操作
     */
    private String part1;
    private String part2;
    public String getPart1() {
        return part1;
    }
    public void setPart1(String part1) {
        this.part1 = part1;
    }
    public String getPart2() {
        return part2;
    }
    public void setPart2(String part2) {
        this.part2 = part2;
    }
}

提供抽象构建者接口:

public interface Builder {
    public void buildPart1();
    public void buildPart2();
    public Product retrieveResult();
}
  • 实现抽象构建者接口的具体构建者:
public class ConcreteBuilder implements Builder {

    private Product product = new Product();
    /**
     * 产品零件建造方法1
     */
    @Override
    public void buildPart1() {
        //构建产品的第一个零件
     product.setPart1("编号:9527");
    }
    /**
     * 产品零件建造方法2
     */
    @Override
    public void buildPart2() {
        //构建产品的第二个零件
     product.setPart2("名称:XXX");
    }
    /**
     * 产品返还方法
     */
    @Override
    public Product retrieveResult() {
        return product;
    }

}

实现指挥者,指挥构建者构建产品:

public class Director {
    /**
     * 持有当前需要使用的建造器对象
     */
    private Builder builder;
    /**
     * 构造方法,传入建造器对象
     * @param builder 建造器对象
     */
    public Director(Builder builder){
        this.builder = builder;
    }
    /**
     * 产品构造方法,负责调用各个零件建造方法
     */
    public void construct(){
        builder.buildPart1();
        builder.buildPart2();
    }
}

客户端调用:

public class Client {
    public static void main(String[]args){
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);
        director.construct();
        Product product = builder.retrieveResult();
        System.out.println(product.getPart1());
        System.out.println(product.getPart2());
    }
}

3、整体程序分析:

  • 创建一个符合多个条件的对象,而不是像工厂方法模式创建一个具体的对象
  • 把产品所有的功能和特点都集成到了具体构建者中去实现的,至于指挥者只负责指挥具体构建者生产
  • 建造者模式应用时就是把创建复杂对象与对象是由什么组成的及如何装配的完全分开

4、使用场景

  • 1、需要生成的产品对象有复杂的内部结构,每一个内部成分本身可以是对象,也可以仅仅是一个对象(即产品对象)的一个组成部分
  • 2、需要生成的产品对象的属性相互依赖
  • 建造模式可以强制实行一种分步骤进行的建造过程
  • 如果产品对象的一个属性必须在另一个属性被赋值之后才可以被赋值,使用建造模式是一个很好的设计思想
  • 3、在对象创建过程中会使用到系统中的其他一些对象,这些对象在产品对象的创建过程中不易得到

© 著作权归作者所有

共有 人打赏支持
职业搬砖20年
粉丝 23
博文 177
码字总数 90471
作品 0
南京
程序员
菜鸟成长系列-Builder 建造者模式

菜鸟成长系列-概述 菜鸟成长系列-面向对象的四大基础特性 菜鸟成长系列-多态、接口和抽象类 菜鸟成长系列-面向对象的6种设计原则 菜鸟成长系列-单例模式 菜鸟成长系列-工厂模式 什么是产品的...

2017/12/30
0
0
我的Java设计模式-建造者模式

在未上大学之前,一直有个梦想“I have a dream!”,就是能成为一位汽车工程师,一直幻想着开着自己设计的汽车飞奔在公路上,迷倒了万千少女。咳咳~~虽然现在没实现我的dream,但梦想还是得有...

Jet啟思
2017/10/11
0
0
设计模式之禅之设计模式-建造者模式

一:建造者模式的定义 --->建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 ● Product产品类 通常是实...

无信不立
2016/01/04
0
0
07、建造者模式--Builder

本节课程大纲 PS:转载请注明出处 作者: TigerChain 地址: http://www.jianshu.com/p/300cbb9ee7f2 本文出自 TigerChain 简书 人人都会设计模式 教程简介 1、阅读对象 本篇教程适合新手阅读,...

TigerChain
2017/12/03
0
0
【设计模式】建造者模式 Builder Pattern

前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的...

风之源
08/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Oracle return exit continue

常在循环体中看到下面3种语句: return exit continue 举例说明 啥都没有 -- none begin for i in 1 .. 10 loop if i < 5 then dbms_output.put_line('i < 5, i = ' || to_char......

taadis
今天
2
0
JSONObject 转换时出错 InvocationTargetException

JSONObject 转换时出错java.lang.reflect.InvocationTargetException 一时看不出来是什么问题。 挺奇怪的。 百度参考了一下这个 网页的解决方案 说是类型不对,空? 仔细查看代码,果然是有一...

之渊
今天
3
0
no such module 'pop'问题

在github上 clone 了一个 swift 项目,编译时提示"no such module 'POP'"错误,查了一下居然是因为podfile中指定的最低版本是iOS 11.0,大于我测试手机的iOS版本10.3.3,将Podfile中的最低版...

yoyoso
今天
3
0
redis 系列一 -- 简介及安装

1.简介 redis -- remote dictionary server 远程字典服务 使用 C 语言编写; 高性能的 key-value数据库; 内存数据库,支持数据持久化。 Redis 是一个开源(BSD许可)的,内存中的数据结构存...

imbiao
今天
4
0
nginx log记录请求响应时间

有时为了方便分析接口性能等,需要记录请求的时长,通过修改nginx的日志格式可以做到,如 添加一个新的log_format log_format timed_combined '$remote_addr - $remote_user [$time_local] "...

swingcoder
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部