【设计模式】建造者模式(定义+例子+总结)

187 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第40天,点击查看活动详情 >>

【设计模式】建造者模式(定义+例子+总结)

今天我们来学习一个新的设计模式,这个模式在实际开发中是非常使用的——建造者模式。

话不多说,我们马上出发!

建造者模式的定义

建造者模式的含义主要是指,可以将一个复杂对象的构建和它所要的表示分离开来,这样的话,就可以使得同样的构建过程就可以创建不同的表示。简单点来说就是建造者模式实现了代码解耦和提高了代码复用的可能。

建造者模式的使用:

通过定义一个建造者让其可以实现了多个表示的实现。

在这个模式的应用中,一定是会存在多个产品或者多种表示的,而这时候如果我们使用了建造者模式的话,就不需要一个一个地具体去创建不同的表示或者产品了,我们只需要使用建造者,让其替用户解决这类问题。

比如说培养不同的人,那么用户并不需要知道太多具体细节(如何培养,要培养哪方面),用户要做的只是将需求告诉建造者即可,剩下来的事情就交给建造者去一手操办了。

下面我们先来看看整个建造者模式设计的类图:

image.png

通过类图我们发现一开始只需要创建builder为抽象建造者,而concreBuilder就是用户告诉建造者它想培养什么样的人才。

根据这个设计去写代码将会大大提高效率。

下面我们来看看建造者类的定义设计: (里面定义的都是抽象方法,等用户告诉建造者需求的时候才实现的)

public abstract class Builder {
    /**
     * 定义了一整套规范的建造流程
     */
    public abstract void goToSchool();
    public abstract void self_learning();
}

具体建造者类有如下的设计: (根据用户需要,实现建造者中的抽象方法。)

public class ConcretBuilder extends Builder {
    /**
     * 具体的建造过程,特色的建造通过@Override实现
     */
    Person person = new Person();
    @Override
    public void goToSchool() {
        person.read = "read";
        System.out.println(person.read);
    }
​
    @Override
    public void self_learning() {
        person.listen = "listen";
        System.out.println(person.listen);
    }
}

总结:

这次我们介绍了建造者模式,学会了应该在什么时候应该使用建造者模式来进行代码优化。

建造者模式是可以在一定程度上解决代码耦合程度过高的问题的,它实现了构造和表示的分开。

建造者模式和工厂方法模式有点类似,他们都是由一个抽象类来实现具体的产品或者表示的,所以大家在学习这两种方法模式的时候要注意区分,千万别弄混了。