美文网首页
建造模式

建造模式

作者: Simple_a | 来源:发表于2019-03-12 23:05 被阅读0次

建造(Builder)模式又称生成模式。它将一个复杂对象的构建过程和对象的表示过程分离开来。

建造模式是对象的创建模式。建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。

什么是内部表象?

《设计与模式》中是这样描述的:

“一个产品常有不同的组成成分作为产品的零件,这些零件有可能是对象,也有可能不是对象,他们通常又叫做产品的内部表象。不同的产品可以有不同的内部表象,也就是不同的零件。使用建造模式可以使客户端不需要知道所生成的产品有哪些零件,每个产品的对应零件彼此有何不同,是怎么建造出来的,以及怎样组成产品。”

再谈工厂模式

工厂模式也是对象的创建模式,通常我们利用工厂模式是直接创建一系列对象,但是工厂模式创建对象是:既包含创建过程,又包含了创建对象功能。比如创造人,工厂模式即创建了人(产品),也创建了人的组成部分(零件):手、脚和头。

而建造模式却解决了这一个问题,它将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。

类图及代码实现

各个部件及其作用

image

指挥者

  1. 作用:构建Builder对象接口的对象。指挥者调度具体的构建细节。
  2. 用于创建一些复杂对象(有建造细节,即有很多零件组成的产品)。
  3. 适用于对象内部构建过程和顺序比较稳定的过程。

建造者

  1. 作用:创建一个产品对象的各个部件的抽象接口。

具体建造者

  1. 实现Builder接口,描写各个部件的具体细节。

Product: 具体产品

类图

image
/*
 * 产品
 */
public class Product {
    private String parts;
    // 添加产品
    public void addParts(String s) {
        this.parts = s;
        System.out.println("建造:"+s);
    }
    public String toString() {
        return this.parts;
    }
}
/*
 * 建造者类接口
 */
public abstract class Builder {
    //封装了一个产品类的引用
    protected Product pr;
    // 构造方法,在创建建造者类对象的同时,也创建了产品类对象。
    public Builder(){
        pr = new Product();
    }
    
    // 返回产品对象
    public Product getProduct() {
        return pr;
    }
    // 创建各个部分零件的方法
    public abstract void buildPartA();
    public abstract void buildPartB();
    public abstract void buildPartC();
}

/*
 * 具体建造者
 */
public class ConcreteBuilderA extends Builder{
    public ConcreteBuilderA() {
        super();
        System.out.println("建造产品中"+"... ...");
    }

    @Override
    public void buildPartA() {
        pr.addParts("partA");
    }

    @Override
    public void buildPartB() {
        pr.addParts("partB");
    }

    @Override
    public void buildPartC() {
        pr.addParts("partC");
        
    }

}
/*
 * 指挥者
 */
public class Director {
    public void construct(Builder b) {
        // 顺序调用,依次组建产品的各个部分
        b.buildPartA();
        b.buildPartB();
        b.buildPartC();
        System.out.println("建造完成!");
    }
}
/*
 * 客户端
 */
public class Client {
    public static void main(String[] args) {
        // 创建一个指挥者对象
        Director d = new Director();
        // 创建一个具体构建者对象
        ConcreteBuilderA cbA = new ConcreteBuilderA();
        // 开始创建
        d.construct(cbA);
        // 获取已经创建的产品
        Product product = cbA.getProduct();
    }
}

相关文章

  • Builder Pattern in Java

    建造者模式:建造者模式定义建造者模式应用场景实现案例Jdk中的建造者模式建造者模式的优点建造者模式的缺点 建造者模...

  • 设计模式(4) 建造者模式

    什么是建造者模式 经典建造者模式的优缺点 对建造者模式的扩展 什么是建造者模式 建造者模式将一个复杂的对象的构建与...

  • 建造者模式(部件构造)

    目录 建造者模式的理念 从 POJO 到建造者模式的思考 怎么来实现建造者模式 建造者模式在Android源码中的...

  • 【设计模式】之建造者Builder模式

    建造者模式 什么是建造者模式? 建造者模式属于创建型模式的一员,可以控制对象的实例化过程。建造者模式简化了复杂对象...

  • 建造者模式

    一、建造者模式介绍 二、建造者模式代码实例

  • 建造者模式

    建造者模式 首先,建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和...

  • 一、设计模式(构建模式)——03建造模式与原型模式

    建造者模式 建造型模式用于创建过程稳定,但配置多变的对象。 建造模式的实现要点: 在建造者模式中,指挥者是直接与客...

  • Builder模式

    建造者模式与工厂模式的区别 我们可以看到,建造者模式与工厂模式是极为相似的,总体上,建造者模式仅仅只比工厂模式多了...

  • 创建型模式:建造者模式

    个人公众号原文:创建型模式:建造者模式 五大创建型模式之四:建造者模式。 简介 姓名 :建造者模式 英文名 :Bu...

  • 设计模式之建造者模式

    设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加...

网友评论

      本文标题:建造模式

      本文链接:https://www.haomeiwen.com/subject/ovxapqtx.html