美文网首页
建造者模式

建造者模式

作者: nieniemin | 来源:发表于2020-06-22 22:46 被阅读0次

什么是建造者模式

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

建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。

模式角色

1 Builder:为创建一个产品对象的各个部件指定抽象接口。包含一个用来返回最终产品的方法Product getProduct()。
2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
3 Director:构造一个使用Builder接口的对象。
4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

UML类图

建造者模式

代码实现

public class Product {
    // 产品名称
    private String name;
    // 产品说明
    private String explain;
    // 生产日期
    private String dateOfManufacture;
    // 产品厂商联系电话
    private String phone;
    // 产品厂商地址
    private String address;

    public Product(String name, String explain, String dateOfManufacture) {
        this.name = name;
        this.explain = explain;
        this.dateOfManufacture = dateOfManufacture;
    }
....省略getter/setter/toString
}

public interface Builder {
    public void setAddress();
    public void setPhone();
    // 其会包含一个用来返回最终产品的方法Product getProduct()
    public Product getProduct();
}
public class ConcreteBuilder implements Builder {

    private Product product;

    public ConcreteBuilder(String name, String explain, String dateOfManufacture) {
        product = new Product(name, explain, dateOfManufacture);
    }

    @Override
    public void setAddress() {
        product.setAddress("产品生产地址");
    }

    @Override
    public void setPhone() {
        product.setPhone("产品联系电话");
    }

    @Override
    public Product getProduct() {
        return product;
    }
}
public class Director {
    public void constructProduct(Builder concreteBuilder) {
        concreteBuilder.setAddress();
        concreteBuilder.setPhone();
    }
}
public class Client {
    public static void main(String[] args) {
        Director director = new Director();
        Builder concreteBuilder = new ConcreteBuilder("产品名字", "生产说明", "生产日期");
        director.constructProduct(concreteBuilder);
        Product product = concreteBuilder.getProduct();
        System.out.println(product);
// Product{name='产品名字', explain='生产说明', phone='产品联系电话', address='产品生产地址', dateOfManufacture='生产日期'}
    }
}

优点
使用建造者模式可以使客户端不必知道产品内部组成的细节。
具体的建造者类之间是相互独立的,这有利于系统的扩展。
具体的建造者相互独立,因此可以对建造的过程逐步细化,而不会对其他模块产生任何影响。
缺点
建造者模式所创建的产品一般具有较多的共同点,其组成部分相似;如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。
如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。

建造者模式完整代码

相关文章

  • Builder Pattern in Java

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

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

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

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

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

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

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

  • 建造者模式

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

  • 建造者模式

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

  • 建造者模式:深入理解建造者模式 ——组装复杂的实例

    目录: 一 建造者模式介绍 1.1 定义 1.2 为什么要用建造者模式(优点)? 1.3 哪些情况不要用建造者模式...

  • 设计模式之建造者模式

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

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

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

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

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

网友评论

      本文标题:建造者模式

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