建造者模式
它与工厂模式一样,也是一种创建型设计模式。不同点在于:它创建的是一种产品,一个复杂的对象。而工厂模式它创建的是一系列产品。它将一个对象的构建与表示分离。在代码中可以详见stringbuilder,它就是典型的构建者模式。
简单理解构建模式
// 这里可能会有人疑惑 为什么不用接口,而用抽象类(个人理解:接口是对于动作的抽象,而抽象类可以是对对象的抽象)
public abstract class Builder {
abstract Builder setA(String msg);
abstract Builder setB(String msg);
abstract Product getProduct();
}
public class Product {
private String A = "汉堡";
private String B = "薯条";
public void setA(String a) {
A = a;
}
public void setB(String b) {
B = b;
}
@Override
public String toString() {
return "Product{" +
"A='" + A + '\'' +
", B='" + B + '\'' +
'}';
}
}
// 具体的构造者是需要继承抽象的构造者 并且对象是需要组合一个产品 每一个具体的构造过程都需要返回产品本
// 身。这样才符合构造者设计模式:通过层层步骤去构建一个对象。就比如stringbuilder.append().append()
public class Worker extends Builder {
private Product product;
public Worker() {
product = new Product();
}
@Override
Builder setA(String msg) {
product.setA(msg);
return this;
}
@Override
Builder setB(String msg) {
product.setB(msg);
return this;
}
@Override
Product getProduct() {
return product;
}
}
在stringbuilder中,具体的产品是放在抽象的构造者之中的。
abstract class AbstractStringBuilder implements Appendable, CharSequence {
/**
* The value is used for character storage.
*/
char[] value;
}
然后具体的构造者其实是在调用抽象的构造者方法
public StringBuilder append(StringBuffer sb) {
super.append(sb);
return this;
}
可以看到它一直调用的是父类的方法