本文僅供學習交流使用勉躺,侵權必刪。
不作商業(yè)用途,轉載請注明出處
WHAT 什么是建造者
建造者模式(builder)鸳谜,將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表示式廷。建造者主要用于創(chuàng)建一些復雜的對象咐扭,這些對象內(nèi)部的構建通常是非常復雜的過程。
建造者UML
WHY 為什么使用建造者
- 如果一個類具有非常多屬性滑废,為了避免構造函數(shù)的參數(shù)列表太長草描,影響可讀性。
- 建造者的好處是對象的創(chuàng)建代碼和對象本身的代碼解耦策严,調(diào)用者無需關心復雜的構建過程穗慕。提高代碼的易用性
- 建造者能讓用戶使用到的是一個構造完整的對象,用戶不會調(diào)用到一個未構造完整的對象妻导。
HOW 建造者的實現(xiàn)(JAVA)
場景:創(chuàng)建一個資源配置對象逛绵,內(nèi)部可能存在復雜的構造過程
- 資源配置類和建造器
package builderDesignPattern;
public class ResourceConfig {
private String url;
private String pwd;
private String user;
private int coreSize;
private int maxSize;
private ResourceConfig() {
}
public ResourceConfig(String url, String user, String pwd, int coreSize, int maxSize) {
this.url = url;
this.user = user;
this.pwd = pwd;
this.coreSize = coreSize;
this.maxSize = maxSize;
}
@Override
public String toString() {
return "ResourceConfig{" +
"url='" + url + '\'' +
", pwd='" + pwd + '\'' +
", user='" + user + '\'' +
", coreSize=" + coreSize +
", maxSize=" + maxSize +
'}';
}
public static class ResourceConfigBuilder {
private String url;
private String pwd;
private String user;
private int coreSize;
private int maxSize;
public ResourceConfigBuilder setUrl(String url) {
this.url = url;
return this;
}
public ResourceConfigBuilder setPwd(String pwd) {
this.pwd = pwd;
return this;
}
public ResourceConfigBuilder setUser(String user) {
this.user = user;
return this;
}
public ResourceConfigBuilder setCoreSize(int coreSize) {
this.coreSize = coreSize;
return this;
}
public ResourceConfigBuilder setMaxSize(int maxSize) {
this.maxSize = maxSize;
return this;
}
public ResourceConfig build() {
if (isEmpty(url)) {
throw new IllegalArgumentException();
}
if (isEmpty(user)) {
throw new IllegalArgumentException();
}
if (isEmpty(pwd)) {
throw new IllegalArgumentException();
}
if (coreSize > maxSize || coreSize <= Integer.MIN_VALUE) {
throw new IllegalArgumentException();
}
if (coreSize > maxSize || maxSize >= Integer.MAX_VALUE) {
throw new IllegalArgumentException();
}
return new ResourceConfig(url, user, pwd, coreSize, maxSize);
}
private boolean isEmpty(String s) {
return s == null || s.isEmpty();
}
}
}
- 客戶端
public class BuilderClient {
public static void main(String[] args) {
String url = "https://www.xxoo.com";
String user = "admin";
String pwd = "a123";
ResourceConfig resourceConfig = new ResourceConfig.ResourceConfigBuilder().setCoreSize(1)
.setMaxSize(5).setUrl(url).setUser(user).setPwd(pwd).build();
System.out.println(resourceConfig.toString());
}
}