角色:
- Buidler 抽象建造者
- ConcreteBuilder 具體建造者
- Director 指揮者(可以省略)
- Product 產(chǎn)品

建造者模式(盜圖)
1. 抽象產(chǎn)品類University
public abstract class University {
protected String uName;
protected int uAge;
protected String uAddress;
protected University() {
}
public abstract void setName(String name);
public abstract void setAge(int age);
public abstract void setAddress(String address);
@Override
public String toString() {
return this.getClass().getSimpleName() + ":\n{" +
"\n 學(xué)校:" + uName +
"\n 校齡:" + uAge +
"\n 地址:" + uAddress +
"\n}";
}
}
2.抽象建造者類UniversityBuilder
public abstract class UniversityBuilder<T extends University> {
public abstract T builder();
public abstract void setName(String name);
public abstract void setAge(int age);
public abstract void setAddress(String address);
}
3.具體產(chǎn)品類HenanUniversity
public class HenanUniversity extends University {
protected HenanUniversity() {
}
@Override
public void setName(String name) {
uName = name;
}
@Override
public void setAge(int age) {
uAge = age;
}
@Override
public void setAddress(String address) {
uAddress = address;
}
}
4.具體建造者HenanUniversityBuilder
public class HenanUniversityBuilder extends UniversityBuilder <HenanUniversity>{
private HenanUniversity henanUniversity = new HenanUniversity();
@Override
public HenanUniversity builder() {
return henanUniversity;
}
@Override
public void setName(String name) {
henanUniversity.setName(name);
}
@Override
public void setAge(int age) {
henanUniversity.setAge(age);
}
@Override
public void setAddress(String address) {
henanUniversity.setAddress(address);
}
}
5.指揮者HenanUniversityDirector
public class HenanUniversityDirector {
private HenanUniversityBuilder builder;
public HenanUniversityDirector(HenanUniversityBuilder builder) {
this.builder = builder;
}
public void construct(String name, int age , String address){
builder.setName(name);
builder.setAge(age);
builder.setAddress(address);
}
}
6.測試
public class BuilderDemo {
public static void main(String[]args){
HenanUniversityBuilder builder = new HenanUniversityBuilder();
HenanUniversityDirector director = new HenanUniversityDirector(builder);
director.construct("河南大學(xué)",104,"河南開封");
HenanUniversity henanUniversity = builder.builder();
System.out.println(henanUniversity);
}
}
運行結(jié)果:
HenanUniversity: { 學(xué)校:河南大學(xué) 校齡:104 地址:河南開封 }
挖坑。這里并不了解實際的使用場景。鴻洋大神的封裝OkHttpUtils使用到了建造者模式,學(xué)習查看OkHttpUtls如何封裝的時候,一開始代碼看的有點懵,慢慢才看懂。這里簡單記錄一下。希望以后再看到采用Builder模式封裝的庫可以有些幫助。以后對設(shè)計模式有些了解后,再來補充。
2016.08.22 17:06