设计模式——建造者模式原理及实现

一、简介

建造者模式(Builder Pattern),又叫生成器模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。通俗来讲,就是将对象的构建过程抽象出来,可用不同的实现类来实现对象的不同特性,达到构建和表示分离的目的。

建造者模式主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。

二、结构图

Product(产品类):具体的产品对象。

Builder(抽象建造者):为了创建Product对象的各个部件指定的抽象接口。

ConcreteBuilder(具体建造者):实现了Builder接口,构造和装配Product各个部件。

Director(指挥者):构建一个使用Builder接口的对象。

三、代码实现

Product类:

由多个部件组成。

public class Product {
    List<String> parts = new ArrayList<>();

    public void add(String part) {
        parts.add(part);
    }

    public void show() {
        parts.forEach(System.out::println);
    }
}

Builder接口类:

确定产品有PartA和PartB组成,并声明一个得到产品建造后结果的方法。

public interface Builder {
    void buildPartA();
    void buildPartB();
    Product getResult();
}

Builder的实现类ConcreteBuilderA、ConcreteBuilderB:

两个不同Part的实现类。

public class ConcreteBuilderA implements Builder{
    private Product product = new Product();
    @Override
    public void buildPartA() {
        product.add("part A");
    }

    @Override
    public void buildPartB() {
        product.add("part B");
    }

    @Override
    public Product getResult() {
        return product;
    }
}
public class ConcreteBuilderB implements Builder {
    private Product product = new Product();

    @Override
    public void buildPartA() {
        product.add("part X");
    }

    @Override
    public void buildPartB() {
        product.add("part Y");
    }

    @Override
    public Product getResult() {
        return product;
    }
}

Director类:

public class Director {
    public void construct(Builder builder) {
        builder.buildPartA();
        builder.buildPartB();
    }
}

测试类:

public class Client {
    public static void main(String[] args) {
        Director director = new Director();
        Builder builderA = new ConcreteBuilderA();
        Builder builderB = new ConcreteBuilderB();

        director.construct(builderA);
        Product productA = builderA.getResult();
        productA.show();

        director.construct(builderB);
        Product productB = builderB.getResult();
        productB.show();
    }
}

四、注意事项

1、客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。

2、每一个具体建造者都相对独立,与其他建造者无关,因此可以很方便的替换具体建造者或增加新的建造者,用户使用不同的建造者即可得到不同的产品对象。

3、建造者模式适用于产品组成部分相似度高的业务,如果产品之间的差异较大,则不适合使用建造者模式。

4、如果产品内部差异较大,则所需建造者就较多,会导致系统庞大。

五、建造者模式和抽象工厂模式

相同点:都抽象了产品的创建过程。

不同点:建造者模式是针对一类产品,不同的创建细节,目的是通过组装部件产生产品;抽象工厂模式是针对一系列产品不同维度的产品,不同维度的产品由不同的工厂类实现。

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值