您的位置:首页 > 其它

设计模式——建造者模式

2017-03-30 18:14 197 查看

定义

Separate the construction of a complex object from its representation so that the same construction process can create different representations.

使用场景

相同方法,不同执行顺序,产生不同事件结果。

多个部件或零件可以装配到一个对象中,对产生的运行结果不相同。

产品类复杂,产品类调用顺序不同产生不同效能。

UML



示例

产品类

public class Product {
private String param1;
private String param2;
private String param3;

public String getParam1() {
return param1;
}

public void setParam1(String param1) {
this.param1 = param1;
}

public String getParam2() {
return param2;
}

public void setParam2(String param2) {
this.param2 = param2;
}

public String getParam3() {
return param3;
}

public void setParam3(String param3) {
this.param3 = param3;
}

@Override
public String toString() {
return "Product{" +
"param1='" + param1 + '\'' +
", param2='" + param2 + '\'' +
", param3='" + param3 + '\'' +
'}';
}
}


抽象建造者

public abstract class Builder {

public abstract Builder buildParam1(String p1);
public abstract Builder buildParam2(String p2);
public abstract Builder buildParam3(String p3);

public abstract Product build();
}


具体建造者

public class ConcreteBuilder extends Builder {
private Product product = new Product();
@Override
public Builder buildParam1(String p1) {
product.setParam1(p1);
return this;
}

@Override
public Builder buildParam2(String p2) {
product.setParam2(p2);
return this;
}

@Override
public Builder buildParam3(String p3) {
product.setParam3(p3);
return this;
}

@Override
public Product build() {
return product;
}
}


导演类

public class Director {
private Builder builder = null;

public Director(Builder builder){
this.builder = builder;
}

public void construct(String param1 , String param2, String param3){
builder.buildParam1(param1)
.buildParam2(param2)
.buildParam3(param3);
}
}


场景类

public class Client {
public static void main(String[] args){
Builder builder = new ConcreteBuilder();

Director director = new Director(builder);
director.construct("1", "2", "3");
Product product = builder.build();
}
}


优点

封装性,不必知道产品内部细节。

容易扩展。

控制细节。 具体建造者是独立的,可对建造过程逐步细化,不对其他模块产生影响。

扩展

链式调用

产品类

public class Product {
private String param1;
private String param2;
private String param3;

public static class Builder {
private Product product = new Product();

public Builder buildParam1(String p1) {
product.param1 = p1;
return this;
}

public Builder buildParam2(String p2) {
product.param2 = p2;
return this;
}

public Builder buildParam3(String p3) {
product.param3 = p3;
return this;
}

public Product build() {
return product;
}
}

@Override
public String toString() {
return "Product{" +
"param1='" + param1 + '\'' +
", param2='" + param2 + '\'' +
", param3='" + param3 + '\'' +
'}';
}
}


场景类

public class Client {
public static void main(String[] args) {
Product product = new Product.Builder()
.buildParam1("param1")
.buildParam2("param2")
.buildParam3("param3")
.build();
}
}


END ~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式