来介绍 创建者模式 的一个变种。分为三个角色,两个类。
这种创建者模式 分为
创建者 Builder 角色
要创建的产品 Product .角色
产品属性封装 角色(内部类)
总体思想:
一、将产品 和 其 属性 分离开。分别定义在不同的类中。
二、构建者持有产品 及 属性封装 角色,并完成 对产品的 属性的最终 赋值 。
先定义产品 :
package com.nzh.build;
import com.nzh.build.Builder.ProductParams;
// 要建造的产品
public class Product {
// 产品的属性
private String url;
private String data;
private boolean isPost;
// 将产品属性的 复制 交由 构建着来预定赋值。
// public void setUrl(String url) {
// this.url = url;
// }
// public void setData(String data) {
// this.data = data;
// }
// public void setPost(boolean isPost) {
// this.isPost = isPost;
// }
// 产品的最终赋值。
public void apply(ProductParams params) {
this.url = params.url;
this.data = params.data;
this.isPost = params.isPost;
}
@Override
public String toString() {
return "Product [url=" + url + ", data=" + data + ", isPost=" + isPost
+ "]";
}
}
定义构建者:
public class Builder {
// 使 产品和属性(构建着的内部类)风别分装在不同类中,分离开。
// 交由构建着来组装 最终创建产品对象
Product product = new Product();
ProductParams params = new ProductParams();
定义产品属性 角色:
// 将Product的属性 封装
class ProductParams {
public String url;
public String data;
public boolean isPost;
}
构建者完整代码:
通过 构建者自身的赋值方法为 属性封装 角色赋值。
通过 build 方法完成最终的赋值。并返回产品对象。
package com.nzh.build;
public class Builder {
// 使 产品和属性(构建着的内部类)风别分装在不同类中,分离开。
// 交由构建着来组装 最终创建产品对象
Product product = new Product();
ProductParams params = new ProductParams();
public Builder setUrl(String url) {
params.url = url;
return this;
}
public Builder setData(String data) {
params.data = data;
return this;
}
public Builder setPost(boolean isPost) {
params.isPost = isPost;
return this;
}
// 最终构建方法,在调用最终构建方法之前都可以灵活的更改产品的属性。
public Product build() {
product.apply(params);
return product;
}
// 将Product的属性 封装
class ProductParams {
public String url;
public String data;
public boolean isPost;
}
}
测试:
public static void main(String[] args) {
Builder builder = new Builder();
Product p = builder.setUrl("www.baidu.com").setData("data")
.setPost(false).build();
System.out.println(p);
}
结果:
Product [url=www.baidu.com, data=data, isPost=false]