本文介绍Java中23个设计模式中的构造器模式。
一 概念
Java 23种设计模式之一,英文叫Builder Pattern。其核心思想是将一个“复杂对象的构建算法”与它的“部件及组装方式”分离,使得构件算法和组装方式可以独立应对变化;复用同样的构建算法可以创建不同的表示,不同的构建过程可以复用相同的部件组装方式。
二 作用
为了将复杂对象的构建过程与它的部件分离。注意: 是解耦过程和部件。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。
三 要点
在创建者模式中,客户端不再负责对象的创建与组装,而是把这个对象创建的责任交给其具体的创建者类,把组装的责任交给组装类,客户端只负责对象的调用,从而明确了各个类的职责。
虽然利用创建者模式可以创建出不同类型的产品,但是如果产品之间的差异巨大,则需要编写多个创建者类才能实现,如果这是结合工厂模式更好。
四、类图
五、实现
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()