设计模式建造者模式(BuilderPattern)

核心模块: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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值