核心模块:Builder抽象建造者、ConcreteBuilder具体建造者、Product产品角色、Director指挥者
所有代码请访问:git@code.aliyun.com:289804201/PatternLearn.git
使用场景:构建复杂对象,或者构件过程中需要强制的分布措施;
优点:客户可以精细的控制构建过程,将产品创建过程和产品本省分离,细节依赖于抽象;
缺点:建造者构建的产品基本相同,如果产品差异过大不适合使用Builder模式;
注意:
1,建造者模式是将一个复杂对象的创建过程给封装起来,而不需要关心具体创建过程;
/**
* Created by tory on 2018/1/11.
* 建造者模式
* 构建复杂对象
*/
public class BuilderPattern {
public static void main(String[] args) {
// Request request = new RequestBuilder().setUrl("www.baidu.com").setMethod("post").setParamter(null).setTimeout(5000).build();
Request request = new Director().build();
System.out.println(request.toS());
}
}
//Builder抽象建造者
interface Builder<T> {
T setUrl(String url);
T setMethod(String method);
T setParamter(Map map);
T setTimeout(int timeout);
}
//Product 产品角色
class Request {
String url;
String method;
Map map;
int timeout;
Request() {
url = "0.0.0.0";
method = "get";
map = null;
timeout = 3000;
}
String toS() {
return url + " method:" + method + " map:" + map + " timeout:" + timeout;
}
}
//ConcreteBuilder 具体建造者
class RequestBuilder implements Builder<RequestBuilder> {
private Request request = new Request();
@Override
public RequestBuilder setUrl(String url) {
request.url = url;
return this;
}
@Override
public RequestBuilder setMethod(String method) {
request.method = method;
return this;
}
@Override
public RequestBuilder setParamter(Map map) {
request.map = map;
return this;
}
@Override
public RequestBuilder setTimeout(int timeout) {
request.timeout = timeout;
return this;
}
Request build() {
return request;
}
}
//Director指挥者
class Director{
RequestBuilder rb = new RequestBuilder();
Request build() {
//这里可以写构建过程中按照强制步骤构建,我觉得这个可有可无,精细的控制构建过程
rb.setUrl("www.baidu.com").setMethod("post").setParamter(null).setTimeout(5000).build();
return rb.build();
}
}
内容打印
Hello World!Hello World!
www.baidu.com method:post map:null timeout:5000