建造者模式

建造者模式,又称为生成器模式,是一种较为复杂、使用频率不高的创建型模式。它为客户端返回的不是一个简单的产品,而是有多个部件组成的复杂产品。以手机为例,建造者模式返回的是一个完整的手机产品,而不是手机的各个部件,显示屏、听筒、主板、电源等,如何将这些部件组装成一个完整的手机给用户,这正是建造者模式解决的问题

 

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式

建造者模式允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节

 

下面以制作书籍为例,代码演示建造者模式

定义书籍产品类

package com.design.builder;

public class Book {

    private String bookName;   //书名

    private String bookAuthor; //作者

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public String getBookAuthor() {
        return bookAuthor;
    }

    public void setBookAuthor(String bookAuthor) {
        this.bookAuthor = bookAuthor;
    }

    @Override
    public String toString() {
        return "Book{" +
                "bookName='" + bookName + '\'' +
                ", bookAuthor='" + bookAuthor + '\'' +
                '}';
    }
}

定义制作书籍的抽象类

这里可以理解为抽象的出版社

package com.design.builder;

public abstract class BookBuilder {

    public abstract void buildBookName(String bookName);

    public abstract void buildBookAuthor(String bookAuthor);

    public abstract Book makeBook();
}

定义具体的制作书籍类,继承制作书籍抽象类

这里可以理解为具体的出版社,如中华书局出版社

package com.design.builder;

public class ZhongHuaBookBuilder extends BookBuilder{

    Book book = new Book();

    @Override
    public void buildBookName(String bookName) {
        book.setBookName(bookName);
    }

    @Override
    public void buildBookAuthor(String bookAuthor) {
        book.setBookAuthor(bookAuthor);
    }

    @Override
    public Book makeBook() {
        return book;
    }
}

定义指挥者类

这里可以理解为出版书籍的负责人

package com.design.builder;

public class Publisher {

    private BookBuilder bookBuilder;

    public Publisher(BookBuilder bookBuilder){
        this.bookBuilder = bookBuilder;
    }

    public Book makeBook(String bookName, String bookAuthor){
        this.bookBuilder.buildBookName(bookName);
        this.bookBuilder.buildBookAuthor(bookAuthor);
        return this.bookBuilder.makeBook();
    }
}

建造者模式代码演示完成

 

类图如下

 

测试调用

这里可以理解为书籍的出版负责人,通过中华书局出版社,出版了曹雪芹写的红楼梦

package com.design.builder;

public class TestMain {

    public static void main(String[] args) {
        BookBuilder bookBuilder = new ZhongHuaBookBuilder();
        Publisher publisher = new Publisher(bookBuilder);
        Book book = publisher.makeBook("红楼梦", "曹雪芹");
        System.out.println(book);
    }
}

 

建造者模式总结

适用场景:

需要生成的产品对象内部结构复杂(包含很多成员变量)

需要生成的产品对象的属性相互依赖,且需要指定其生成顺序

隔离复杂对象的创建和使用,且相同的创建过程可创建不同的产品

对象的创建过程独立于创建该对象的类

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟世君子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值