`

23种设计模式(4):建造者模式

 
阅读更多
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

类型:创建类模式

类图:

四个要素

  • 产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。
  • 抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。
  • 建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。
  • 导演类:负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。

代码实现

  1. classProduct{
  2. privateStringname;
  3. privateStringtype;
  4. publicvoidshowProduct(){
  5. System.out.println("名称:"+name);
  6. System.out.println("型号:"+type);
  7. }
  8. publicvoidsetName(Stringname){
  9. this.name=name;
  10. }
  11. publicvoidsetType(Stringtype){
  12. this.type=type;
  13. }
  14. }
  15. abstractclassBuilder{
  16. publicabstractvoidsetPart(Stringarg1,Stringarg2);
  17. publicabstractProductgetProduct();
  18. }
  19. classConcreteBuilderextendsBuilder{
  20. privateProductproduct=newProduct();
  21. publicProductgetProduct(){
  22. returnproduct;
  23. }
  24. publicvoidsetPart(Stringarg1,Stringarg2){
  25. product.setName(arg1);
  26. product.setType(arg2);
  27. }
  28. }
  29. publicclassDirector{
  30. privateBuilderbuilder=newConcreteBuilder();
  31. publicProductgetAProduct(){
  32. builder.setPart("宝马汽车","X7");
  33. returnbuilder.getProduct();
  34. }
  35. publicProductgetBProduct(){
  36. builder.setPart("奥迪汽车","Q5");
  37. returnbuilder.getProduct();
  38. }
  39. }
  40. publicclassClient{
  41. publicstaticvoidmain(String[]args){
  42. Directordirector=newDirector();
  43. Productproduct1=director.getAProduct();
  44. product1.showProduct();
  45. Productproduct2=director.getBProduct();
  46. product2.showProduct();
  47. }
  48. }

建造者模式的优点

首先,建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和建造者类是比较稳定的,因此,将主要的业务逻辑封装在导演类中对整体而言可以取得比较好的稳定性。

其次,建造者模式很容易进行扩展。如果有新的需求,通过实现一个新的建造者类就可以完成,基本上不用修改之前已经测试通过的代码,因此也就不会对原有功能引入风险。

建造者模式与工厂模式的区别

我们可以看到,建造者模式与工厂模式是极为相似的,总体上,建造者模式仅仅只比工厂模式多了一个“导演类”的角色。在建造者模式的类图中,假如把这个导演类看做是最终调用的客户端,那么图中剩余的部分就可以看作是一个简单的工厂模式了。

与工厂模式相比,建造者模式一般用来创建更为复杂的对象,因为对象的创建过程更为复杂,因此将对象的创建过程独立出来组成一个新的类——导演类。也就是说,工厂模式是将对象的全部创建过程封装在工厂类中,由工厂类向客户端提供最终的产品;而建造者模式中,建造者类一般只提供产品类中各个组件的建造,而将具体建造过程交付给导演类。由导演类负责将各个组件按照特定的规则组建为产品,然后将组建好的产品交付给客户端。

总结

建造者模式与工厂模式类似,他们都是建造者模式,适用的场景也很相似。一般来说,如果产品的建造很复杂,那么请用工厂模式;如果产品的建造更复杂,那么请用建造者模式。

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

类型:创建类模式

类图:

四个要素

  • 产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。
  • 抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。
  • 建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。
  • 导演类:负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。

代码实现

  1. classProduct{
  2. privateStringname;
  3. privateStringtype;
  4. publicvoidshowProduct(){
  5. System.out.println("名称:"+name);
  6. System.out.println("型号:"+type);
  7. }
  8. publicvoidsetName(Stringname){
  9. this.name=name;
  10. }
  11. publicvoidsetType(Stringtype){
  12. this.type=type;
  13. }
  14. }
  15. abstractclassBuilder{
  16. publicabstractvoidsetPart(Stringarg1,Stringarg2);
  17. publicabstractProductgetProduct();
  18. }
  19. classConcreteBuilderextendsBuilder{
  20. privateProductproduct=newProduct();
  21. publicProductgetProduct(){
  22. returnproduct;
  23. }
  24. publicvoidsetPart(Stringarg1,Stringarg2){
  25. product.setName(arg1);
  26. product.setType(arg2);
  27. }
  28. }
  29. publicclassDirector{
  30. privateBuilderbuilder=newConcreteBuilder();
  31. publicProductgetAProduct(){
  32. builder.setPart("宝马汽车","X7");
  33. returnbuilder.getProduct();
  34. }
  35. publicProductgetBProduct(){
  36. builder.setPart("奥迪汽车","Q5");
  37. returnbuilder.getProduct();
  38. }
  39. }
  40. publicclassClient{
  41. publicstaticvoidmain(String[]args){
  42. Directordirector=newDirector();
  43. Productproduct1=director.getAProduct();
  44. product1.showProduct();
  45. Productproduct2=director.getBProduct();
  46. product2.showProduct();
  47. }
  48. }

建造者模式的优点

首先,建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和建造者类是比较稳定的,因此,将主要的业务逻辑封装在导演类中对整体而言可以取得比较好的稳定性。

其次,建造者模式很容易进行扩展。如果有新的需求,通过实现一个新的建造者类就可以完成,基本上不用修改之前已经测试通过的代码,因此也就不会对原有功能引入风险。

建造者模式与工厂模式的区别

我们可以看到,建造者模式与工厂模式是极为相似的,总体上,建造者模式仅仅只比工厂模式多了一个“导演类”的角色。在建造者模式的类图中,假如把这个导演类看做是最终调用的客户端,那么图中剩余的部分就可以看作是一个简单的工厂模式了。

与工厂模式相比,建造者模式一般用来创建更为复杂的对象,因为对象的创建过程更为复杂,因此将对象的创建过程独立出来组成一个新的类——导演类。也就是说,工厂模式是将对象的全部创建过程封装在工厂类中,由工厂类向客户端提供最终的产品;而建造者模式中,建造者类一般只提供产品类中各个组件的建造,而将具体建造过程交付给导演类。由导演类负责将各个组件按照特定的规则组建为产品,然后将组建好的产品交付给客户端。

总结

建造者模式与工厂模式类似,他们都是建造者模式,适用的场景也很相似。一般来说,如果产品的建造很复杂,那么请用工厂模式;如果产品的建造更复杂,那么请用建造者模式。

分享到:
评论

相关推荐

    23种设计模式之:建造者,代理,观察,策略,状态模式

    本文将重点介绍标题中提到的五种设计模式:建造者模式、代理模式、观察者模式、策略模式以及状态模式。 **1. 建造者模式(Builder)** 建造者模式是一种创建型设计模式,它允许我们分步骤构建复杂对象,而无需暴露...

    设计模式——建造者模式

    建造者模式是一种结构型设计模式,它允许我们分步骤创建复杂对象,而无需暴露构建过程的内部细节。这种模式在Java编程中非常常见,尤其是在处理需要多种构建方式或需要隔离对象构造过程的场景。 建造者模式的核心...

    设计模式之建造者模式代码示例

    建造者模式(Builder Pattern)是软件工程中一种用于创建对象的抽象工厂方法,它将复杂的构建过程分解为一系列步骤,使得构建过程可以独立于其表示进行。这种模式允许客户端使用相同的构建过程创建不同表现形式的...

    《设计模式:可复用面向对象软件的基础》学习并理解 23 种设计模式

    - **建造者模式**(Builder):将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 - **原型模式**(Prototype):通过复制一个已有实例来创建新对象,而不是通过创建操作。 2. **结构型...

    23种设计模式详解PDF

    、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式(7): 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式(11): 策略模式、模板方法模式、观察者模式、...

    设计模式之建造者模式

    在Java的23种设计模式中,建造者模式是一个非常实用且重要的模式。 建造者模式通常包含四个角色:产品角色(Product)、抽象建造者角色(Builder)、具体建造者角色(Concrete Builder)以及导演角色(Director)。...

    java 23种设计模式.zip

    1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:模板方法模式、命令模式、...

    C++ 23种设计模式1

    4. **Builder模式**:建造者模式将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。它通过步骤化的构建过程,使创建过程更加灵活。 5. **Prototype模式**:原型模式通过克隆已有对象来创建新...

    GOF23种设计模式

    GOF(GoF)23种设计模式,是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大神在他们的著作《设计模式:可复用面向对象软件的基础》中提出的,这些模式分为创建型、结构型和行为型三大类。...

    设计模式-建造者模式

    建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种方法来分步骤构建复杂的对象,使得构建过程和表示分离,使得同样的构建过程可以创建不同的表示。这种模式经常在对象的构造过程中需要进行多种选择...

    java常用设计模式-建造者模式

    -java常用设计模式-建造者模式是java中的一种创建型设计模式,它允许开发者通过一步一步地构建复杂对象来创建不同类型的对象。 建造者模式的定义 建造者模式是一种创建型设计模式,它允许开发者通过一步一步地构建...

    设计模式例子,观察者模式,建造者模式

    在给定的压缩包文件中,"设计模式例子,观察者模式,建造者模式" 提到了两种重要的设计模式:观察者模式(Observer Pattern)和建造者模式(Builder Pattern)。下面我们将深入探讨这两种设计模式的概念、应用场景、...

    原创:设计模式之建造者模式生动实例

    建造者模式,是设计模式中的一种创建型模式,它的核心思想是将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在Java编程中,这种模式经常用于生成对象,特别是当对象的创建过程较为复杂时,...

    设计模式之建造者Builder模式

    **建造者模式(Builder Pattern)**是软件设计模式中的一种,属于创建型模式。它将复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于那些需要大量构造参数的对象,通过...

    23种java设计模式.pdf

    创建模式是指在创建对象时使用的模式,包括 Factory(工厂模式)、Singleton(单例模式)、Builder(建造者模式)、Prototype(原型模式)等。这些模式都是为了解决对象创建的问题,使得对象的创建更加灵活和可扩展...

    C# 23种设计模式(中文高清带书签)

    《C# 23种设计模式》是一本深入解析C#编程中常用设计模式的权威指南,对于想要提升代码质量、提高软件可维护性的开发者来说,是不可或缺的参考资料。书中详细介绍了23种经典的设计模式,这些模式是软件工程实践中...

    Java设计模式-建造者模式详解

    Java设计模式-建造者模式详解 Java设计模式-建造者模式详解将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式(Builder)是使用多个“小型”工厂来最终创建出一个完整对象。...

    Java之23种设计模式解析

    1. **创建型模式**(Creational Patterns):这类模式主要关注对象的创建过程,包括单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。它们提供了一种在不指定具体类的情况下创建对象的方式,提高了代码...

Global site tag (gtag.js) - Google Analytics