设计模式之构造器模式(Builder)

本文介绍Java中23个设计模式中的构造器模式。

一 概念
Java 23种设计模式之一,英文叫Builder Pattern。其核心思想是将一个“复杂对象的构建算法”与它的“部件及组装方式”分离,使得构件算法和组装方式可以独立应对变化;复用同样的构建算法可以创建不同的表示,不同的构建过程可以复用相同的部件组装方式。

二 作用
为了将复杂对象的构建过程与它的部件分离。注意: 是解耦过程和部件。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。

三 要点
在创建者模式中,客户端不再负责对象的创建与组装,而是把这个对象创建的责任交给其具体的创建者类,把组装的责任交给组装类,客户端只负责对象的调用,从而明确了各个类的职责。
虽然利用创建者模式可以创建出不同类型的产品,但是如果产品之间的差异巨大,则需要编写多个创建者类才能实现,如果这是结合工厂模式更好。

四、类图

设计模式之构造器模式(Builder)_第1张图片
五、实现

class Product {
    private String title;
    private double price;

    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }

    public String toString() {
        return "title=" + title + ", price=" + price;
    }
}

class Director {
    private Builder builder;
    public Director(Builder builder) {
         this.builder = builder;
    }
    public void construct() {
        builder.buildPartA();
        builder.buildPartB();
    }
}

interface Builder {
    void buildPartA();
    void buildPartB();
    Product getResult();

}

class BuilderA implements Builder {
    private Product productA;
    public BuilderA(Product productA) {
        this.productA = productA;
    }

    public void buildPartA() {
        this.productA.setTitle("设计模式");
    }

    public void buildPartB() {
        this.productA.setPrice(28.8);
    }

    public Product getResult() {
        return productA;
    }
}

public class TestBuilder {
    public static void main(String[] args) {
        BuilderA builderA = new BuilderA(new Product());
        Director director = new Director(builderA);
        director.construct();
        System.out.println(builderA.getResult());
    }
}

六、JDK中构造器模式类

  • java.lang.stringbuilder#append()
  • java.lang.stringbuffer#append()
  • java.sql.preparedstatement
  • javax.swing.grouplayout.group#addcomponent()

你可能感兴趣的:(设计模式)