设计模式(10)建造者模式

一、介绍

1、概念:将一个复杂对象的构造与它的表示分离,使得同样的构造过程可以创建不同的表示。建造者模式主要用于创建一些复杂的对象,这些对象内部构建间的顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化;建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。

2、结构图:

import java.util.ArrayList;
 
//产品类
public class Product {
    ArrayList<String> parts = new ArrayList<>();
 
    //添加新的产品不见
    public void add(String part) {
        parts.add(part);
    }
 
    // 列举所有的产品不见
    public void show() {
        for (String part : parts) {
            System.out.println(part);
        }
    }
}
 
//抽象的建造者类
public abstract class Builder {
    //建造部件A
    public abstract void buildPartA();
    //建造部件B
    public abstract void buildPartB();
    //得到产品
    public abstract Product getResult();
 
}
 
 
//具体的建造类
public class ConcreteBuilder1 extends Builder {
    private Product product = new Product();
 
    @Override
    public void buildPartA() {
        product.add("部件A");
    }
 
    @Override
    public void buildPartB() {
        product.add("部件B");
    }
 
    @Override
    public Product getResult() {
        return product;
    }
}
 
//具体的建造类
public class ConcreteBuilder2 extends Builder {
    private Product product = new Product();
 
    @Override
    public void buildPartA() {
        product.add("部件X");
    }
 
    @Override
    public void buildPartB() {
        product.add("部件Y");
    }
 
    @Override
    public Product getResult() {
        return product;
    }
}
 
//指挥者类
public class Director {
    //建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。
    public void construct(Builder builder) {
        builder.buildPartA();
        builder.buildPartB();
    }
}
 
 
    public static void main(String[] args) {
        Director director = new Director();
        Builder b1 = new ConcreteBuilder1();
        Builder b2 = new ConcreteBuilder2();
        director.construct(b1);
        Product result1 = b1.getResult();
 
        director.construct(b2);
        Product result2 = b2.getResult();
    }

 3、使用场景:当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时使用。

4、优点:

  • 首先,建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和建造者类是比较稳定的,因此,将主要的业务逻辑封装在导演类中对整体而言可以取得比较好的稳定性。
  • 其次,建造者模式很容易进行扩展。如果有新的需求,通过实现一个新的建造者类就可以完成,基本上不用修改之前已经测试通过的代码,因此也就不会对原有功能引入风险。

5、建造者模式与工厂模式的区别:

  • 建造者模式与工厂模式是极为相似的,总体上,建造者模式仅仅只比工厂模式多了一个“导演类”的角色。在建造者模式的类图中,假如把这个导演类看做是最终调用的客户端,那么图中剩余的部分就可以看作是一个简单的工厂模式了。
  • 与工厂模式相比,建造者模式一般用来创建更为复杂的对象,因为对象的创建过程更为复杂,因此将对象的创建过程独立出来组成一个新的类——导演类。也就是说,工厂模式是将对象的全部创建过程封装在工厂类中,由工厂类向客户端提供最终的产品;而建造者模式中,建造者类一般只提供产品类中各个组件的建造,而将具体建造过程交付给导演类。由导演类负责将各个组件按照特定的规则组建为产品,然后将组建好的产品交付给客户端
  • 工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

w_t_y_y

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

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

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

打赏作者

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

抵扣说明:

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

余额充值