前言
23种设计模式很多前辈或大神都分享过。为了加深对这些模式印象,我重新写下来,用来记录。可以等以后,重新查看,也能看出自己的进步。如果发现有什么问题?可以直接指出,谢谢!
构建者模式的定义
将构造过程跟表示过程进行分离,使得同样的构建过程可以创建不同的表示。
何时使用
创建一个复杂的对象,同时该复杂的对象有很多默认不同的参数;这个复杂对象各个部件激烈的变化,但是组合在一起却相对稳定。
使用场景
Java中的StringBuffer和StringBuilder类;Android的AlertDialog;很多第三方框架中也会使用到,如聚合支付SDK(Ping++)、nohttp等。
上面说了那么多废话,还是直接上代码,因为我造不出来了。。。本次代码演示模拟支付
/**
* 创建者模式
*/
public class Payment {
private Builder builder;
private Payment(Builder builder) {
this.builder = builder;
}
public void pay() {
System.out.println("发起支付");
System.out.println("支付中...");
System.out.println("支付信息:" + this.builder.toString());
System.out.println("支付成功");
}
public static class Builder {
int id;
String orderNo;
String callBackUrl;
String price;
String body;
public Builder() {
this.id = new Random().nextInt(1000);
this.orderNo = String.valueOf(System.currentTimeMillis());
this.callBackUrl = "https:www.baidu.com";
this.price = String.valueOf(new Random().nextInt(100000));
}
public Builder setId(int id) {
this.id = id;
return this;
}
public Builder setOrderNo(String orderNo) {
this.orderNo = orderNo;
return this;
}
public Builder setCallBackUrl(String callBackUrl) {
this.callBackUrl = callBackUrl;
return this;
}
public Builder setPrice(String price) {
this.price = price;
return this;
}
public Builder setBody(String body) {
this.body = body;
return this;
}
public Payment create() {
return new Payment(this);
}
public String toString() {
return "\n" + "id=" + id + "\n" + "orderNo=" + orderNo + "\n" +
"callBackUrl=" + callBackUrl + "\n" + "price=" + price + "\n" + "body=" + body;
}
}
}
测试代码:
public class MainTest {
public static void main(String[] args) {
new Payment.Builder().setBody("2018,加油").create().pay();
}
}
输出结果:
发起支付
支付中...
支付信息:
id=243
orderNo=1515083956958
callBackUrl=https:www.baidu.com
price=15259
body=2018,加油
支付成功
参考资料:
http://blog.csdn.net/qq_23901559/article/details/49368793
http://www.runoob.com/design-pattern/builder-pattern.html