JAVA架构师之路五:设计模式之建造者模式

本文探讨了建造者模式的概念,强调其封装性和扩展性,并通过对比工厂模式,阐述了建造者模式在创建复杂对象时的优势。同时,提到了链式写法在实际开发中的应用,以及建造者模式可能产生的不足。最后,鼓励读者通过实践来深化对建造者模式的理解。

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

JAVA架构师之路四:设计模式之原型模式

形式由功能而来。——沙利文

形式由功能而来。建造者模式刚好描述了这句话。

1. 建造者模式

定义

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
特征:用户只需指定需要建造的类型就可以获得对象,建造过程及细节不需要了解。
属于创建型模式。

优点

封装性好,创建和使用分离
扩展性好,建造类之间的独立,一定程度上解耦

缺点

产生多余的Builder对象
产品内部发生变化,建造者都要修改,成本较大

2. 简单写法

public class Book {

    private String name;

    private Double price;

    private String address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", price=" + price +
                ", address='" + address + '\'' +
                '}';
    }
}
public class BookBuilder {

    private Book book = new Book();

    public void setName(String name) {
        book.setName(name);
    }

    public void setPrice(Double price) {
        book.setPrice(price);
    }

    public void setAddress(String address) {
        book.setAddress(address);
    }

    public Book build() {
        return book;
    }
}

public class Test {

    public static void main(String[] args) {
        BookBuilder bb = new BookBuilder();
        bb.setName("Java");
        bb.setAddress("天津");
        bb.setPrice(32.2);
        System.out.println(bb.build());
    }
}
Book{name='Java', price=32.2, address='天津'}

一般来说,这种写法很少见,不推荐。

3. 链式写法

public class BookBuilder {

    private Book book = new Book();

    public BookBuilder setName(String name) {
        book.setName(name);
        return this;
    }

    public BookBuilder setPrice(Double price) {
        book.setPrice(price);
        return this;
    }

    public BookBuilder setAddress(String address) {
        book.setAddress(address);
        return this;
    }

    public Book build() {
        return book;
    }
}

public class Test {

    public static void main(String[] args) {
        BookBuilder bb = new BookBuilder()
                .setName("Java")
                .setAddress("天津")
                .setPrice(32.2);
        System.out.println(bb.build());
    }
}

链式写法在各种框架中经常用到,在JDKStringBuilderappend()方法就是链式写法,mybatis中的SqlSessionFactoryBuilderspring 中的BeanDefinitionBuilder 等等。

4. 建造者模式和工厂模式的区别

建造者模式更加注重方法的调用顺序,工厂模式注重于创造对象

创建对象的力度不同,建造者模式创建复杂的对象,由各种复杂的部件组成,工厂模式创建出来的都一样。

关注点:工程模式只需要把对象创建出来就可以了,而建造者模式中不仅要创建出来对象,还要知道这个对象有哪些部件组成。

建造者模式根据建造过程的顺序不一样,最终的对象部件组成也不一样。

感谢您阅读本文,如果您觉得文章写的对您有用的话,请您点击上面的“关注”,点个赞,这样您就可以持续收到《JAVA架构师之路》的最新文章了。文章内容属于自己的一点点心得,难免有不对的地方,欢迎在下方评论区探讨,你们的关注是我创作优质文章的动力。

JAVA架构师之路六:设计模式之代理模式

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值