事实上建造者模式就是类中创建一个内部类 然后外部类构造函数传递的是一个内部类的对像。然后在内部类中的set和get方法中返回值是一个内部类对像,这样就能非常好的实现建造者模式。
事实上他就像StringBuilder中的append:string a=“a”。a.append("wo").append("shi").append("shei")。
实现一直不断的追加字符串。
样例例如以下:
package com.blueZhang.innerDemo5;
public class Test {
public static void main(String[] args) {
// StringBuffer ss = new StringBuffer("abc");
// ss.append("123").append("000").append("xxx");// --->"abc123000xxx"
// System.out.println(ss.toString());
QQ.Builder qb = new QQ.Builder("10000", "888888");
qb.setAge(12).setSex("男");// .setEmail("abc@199.com");
QQ qq = new QQ(qb);
System.out.println(qq);
QQ q = qb.build();
System.out.println(q);
}
}
class QQ {
String qqNo;
String pass;
String sex;
int age;
String email;
// 构建器
public static class Builder {
String qqNo;
String pass;
String sex;
int age;
String email;
// 要求qq号和password必填,其它选填
public Builder(String qqNo, String pass) {
this.qqNo = qqNo;
this.pass = pass;
}
public Builder setAge(int age) {
this.age = age;
return this;
}
public Builder setSex(String sex) {
this.sex = sex;
return this;
}
public Builder setEmail(String email) {
this.email = email;
return this;
}
// 2
public QQ build() {
return new QQ(this);
}
}
public QQ(Builder b) {
this.qqNo = b.qqNo;
this.pass = b.pass;
this.sex = b.sex;
this.age = b.age;
this.email = b.email;
}
@Override
public String toString() {
return qqNo + pass + age + sex + email;
}
}