设计模式之Builder模式总结

本文通过对比传统构造方法与Builder模式,详细介绍了Builder模式的实现原理及其优势。Builder模式不仅提高了代码的可读性和安全性,还简化了复杂对象的构建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家在没有接触builder模式之前,写一个类会这样写

class A{

    private String a;

    private String b;

    private String c;




    public A(String a, String b, String c){}  

} 

然后这么使用①

new A("a", "b", "c"); 

或者这么使用②

A a = new A();

a.setA("a");

a.setB("b");

...

但是这么使用你有没有发现一个问题,①你真的记得住各种参数的顺序?别说顺序了,你真的记得住各种参数?是不是也要每次翻开这个类来查看?如果这个类是你自己写的还好,一眼就看明白了,如果这个类是别人写的呢?难免会发生不必要的错误,②如果使用第二种方式,这样方式,使得该类的其他属性在被创建之后被修改,给程序带来了一些不安全性,特别是多线程中。特别是我举例的还是比较简单的类,不复杂的,如果有些类很复杂,那真的就会很难受了。
所以这个时候builder模式就闪亮登场了!解救你于水深火热之中

class A{

    private String a;

    private String b;

    private String c;

   public static class Builder {

    private String a;

    private String b;

    private String c;

        public Builder setValueA(String a) {
            this.a = a;
            return this;
        }

        public Builder setValueB(String b) {
            this.b = b;
            return this;
        }

        public Builder setValueC(String c) {
            this.c = c;
            return this;
        }

        void apply(A A){
            A.a=this.a;
            A.b=this.b;
            A.c=this.c;
        }  
        public A build() {
            A test =new A();
            apply(test);
            return test;
        }

    }

} 

然后这么调用

A a = new A.Buider()
.setValueA("I am A")
.setValueB("I am B")
.setValueC("I am C")
.build();

这一串的链式调用是不是很舒服,当你buider()然后点的时候,编译器就会提示里面的函数了,是不是对参数一目了然了,再也不会担心忘记参数了。

总结

使用builder模式显著带来的好处就是有良好的封装性,可以让客户端不必知道内部组成的细节,链式调用各种参数即可,而且建造与表示分离,容易扩展,当然也要认识到这种模式会产生多余的builder对象消耗内存,而且还会让程序员多敲不少代码(这点可忽略 哈哈哈哈)!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值