Java设计模式-建造者模式

建造者模式

1.建造者模式含义

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

建造者模式可以理解为更加细致的工厂方法模式,工厂方法模式专注于生产对象实例的结果,而建造者模式更侧
重于生产对象实例的过程。

2.代码示例

建造者模式,通过含义的一段文字描述可能不太好理解,下面通过示例代码来讲解一下建造者模式

2.1Product类

public class Product {
    // 产品生产所需的零件集合
    private List<String> parts = new ArrayList<>();

    public List<String> getParts() {
        return parts;
    }

    public void setParts(List<String> parts) {
        this.parts = parts;
    }

    // 产品生产方法
    public void show(){
        System.out.println("产品创建-----------");
        for (String part : this.parts) {
            System.out.println(part);
        }
    }
}

2.2Builder类

public abstract class Builder {

    // 构建Product实例的A流程
    public abstract void buildPartA();
    // 构建Product实例的B流程
    public abstract void buildPartB();

    // 最终构建出Product实例结果的方法
    public abstract Product getResult();

}

2.3ConcreteBuilder1类

public class ConcreteBuilder1 extends Builder{
    // 实例化一个产品对象
    private Product product = new Product();
    
    // 这个产品生产的时候A工序业务逻辑
    @Override
    public void buildPartA() {
        product.getParts().add("零件A");
    }

    // 这个产品生产的时候B工序业务逻辑
    @Override
    public void buildPartB() {
        product.getParts().add("零件B");
    }

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

2.4ConcreteBulider2类

/**
 * 建造者2生产产品的流程
 */
public class ConcreteBuilder2 extends Builder{

    // 实例化一个产品对象
    private Product product = new Product();

    /**
     * 这个产品生产的时候A工序业务逻辑
     */
    @Override
    public void buildPartA() {
        product.getParts().add("零件X");
    }

    /**
     * 这个产品生产的时候B工序业务逻辑
     */
    @Override
    public void buildPartB() {
        product.getParts().add("零件Y");
    }

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

2.5Director类

/**
 * 指挥者,指挥创建者以什么样的顺序生产product
 */
public class Director {
    public void construct(Builder builder){
        // 先执行A工序
        builder.buildPartA();
        // 再执行B工序
        builder.buildPartB();
    }
}

2.6测试类

public class MainApp {
    public static void main(String[] args) {
        // 实例化一个指挥者
        Director director = new Director();
        // 实例化两个建造者
        Builder builder1 = new ConcreteBuilder1();
        Builder builder2 = new ConcreteBuilder2();

        // 指挥建造者1生产产品
        director.construct(builder1);
        Product product1 = builder1.getResult();
        product1.show();

        // 指挥建造者2生产产品
        director.construct(builder2);
        Product product2 = builder2.getResult();
        product2.show();
    }
}

运行结果

产品创建-----------
零件A
零件B
产品创建-----------
零件X
零件Y

2.7说明

Product类是我们需要具体生产的产品,而Product的生产需要Builder来完成。Builder生产Product的方式又分为两种ConcreteBuilder1和ConcreteBuilder2,这两个生产方式所用的零件不同。而Product的具体生产顺序又由Director来控制。

所以测试类中的产品生产顺序就是,先实例化一个Director对象,确定产品生产工序的顺序。然后再实例化两个不同的生产者,用不同的零件生产出Product。

3.建造者模式UML类图

在这里插入图片描述

4.总结

建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时使用的。

简单点说就是,如果一个对象组成结构比较复杂,在创建的时候,需要根据客户端的需求,自定义改变这个对象的各个结构的组成顺序,组成原理等,这个时候就适合使用建造者模式了。

建造者模式跟工厂方法模式的区别在于,工厂方法是直接生产出对象的实例,并不关注对象生产的过程、顺序等,只关注对象生产的结果,并且生产出来的对象都是一样的。而建造者模式则是关注对象生产的过程、顺序等,当对象生产的过程顺序发生改变,最终生产出来的对象的结构就会变得不一样,这就是两者的区别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我的小幸运呢

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

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

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

打赏作者

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

抵扣说明:

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

余额充值