目录

1、建造者模式阐述

2、使用Java代码实现建造者模式

3、为什么需要使用建造者模式?

4、建造者模式与工厂方法模式有什么区别?


1、建造者模式阐述

Java 建造者模式是一种创建型设计模式,其主要目的是将一个复杂对象的构建过程与其表示分离,从而使得同样的构建过程可以创建不同的表示。

在 Java 中,建造者模式通常由以下几个角色组成:

  1. 产品(Product):表示被构建的复杂对象,通常由多个部件组成。

  2. 抽象建造者(Builder):定义创建产品对象各个部件的接口,通常由多个方法组成。

  3. 具体建造者(Concrete Builder):实现抽象建造者接口,实现创建产品对象各个部件的具体方法,同时定义返回组装好的产品对象的方法。

  4. 指挥者(Director):负责调用建造者来创建产品对象,同时指定建造过程的顺序。

在 Java 中,建造者模式的应用非常广泛,例如,Java 标准库中的 StringBuilder 类就是一个建造者模式的实现。StringBuilder 类允许用户通过 append() 方法添加字符串,最终构建出一个复杂的字符串对象。StringBuilder 类本身就是一个具体建造者,而用户通过调用 append() 方法来添加不同的字符串部件,由 StringBuilder 类来负责组装最终的字符串对象。

另外,在一些框架和项目中也经常使用建造者模式来构建复杂的对象,例如,在 Spring 框架中,我们可以使用建造者模式来创建 ApplicationContext 对象。Spring 中的 ApplicationContext 对象可以看作是一个复杂的对象,它由多个不同的部件(如 bean 定义、环境配置、AOP 配置等)组成。而 Spring 框架为我们提供了多种方式来创建 ApplicationContext 对象,其中就包括了建造者模式。通过调用不同的建造者方法,我们可以创建出不同的 ApplicationContext 对象。

2、使用Java代码实现建造者模式

下面是一个简单的 Java 建造者模式的示例代码:// 该示例严格遵循了模式所需要的角色,请仔细看

产品类:

public class Car {private String engine;private String wheels;private String body;public void setEngine(String engine) {this.engine = engine;}public void setWheels(String wheels) {this.wheels = wheels;}public void setBody(String body) {this.body = body;}@Overridepublic String toString() {return "Car{" +"engine='" + engine + '\'' +", wheels='" + wheels + '\'' +", body='" + body + '\'' +'}';}
}

抽象建造者类:

public abstract class CarBuilder {protected Car car = new Car();public abstract void buildEngine();public abstract void buildWheels();public abstract void buildBody();public Car getCar() {return car;}
}

具体建造者类:

public class SportsCarBuilder extends CarBuilder {@Overridepublic void buildEngine() {car.setEngine("V8 engine");}@Overridepublic void buildWheels() {car.setWheels("20-inch wheels");}@Overridepublic void buildBody() {car.setBody("Carbon fiber body");}
}public class FamilyCarBuilder extends CarBuilder {@Overridepublic void buildEngine() {car.setEngine("4-cylinder engine");}@Overridepublic void buildWheels() {car.setWheels("16-inch wheels");}@Overridepublic void buildBody() {car.setBody("Steel body");}
}

指挥者类:

public class CarDirector {private CarBuilder carBuilder;public CarDirector(CarBuilder carBuilder) {this.carBuilder = carBuilder;}public void buildCar() {carBuilder.buildEngine();carBuilder.buildWheels();carBuilder.buildBody();}public Car getCar() {return carBuilder.getCar();}
}

客户端代码:

public class Client {public static void main(String[] args) {CarBuilder sportsCarBuilder = new SportsCarBuilder();CarBuilder familyCarBuilder = new FamilyCarBuilder();CarDirector sportsCarDirector = new CarDirector(sportsCarBuilder);CarDirector familyCarDirector = new CarDirector(familyCarBuilder);sportsCarDirector.buildCar();familyCarDirector.buildCar();Car sportsCar = sportsCarDirector.getCar();Car familyCar = familyCarDirector.getCar();System.out.println(sportsCar.toString());System.out.println(familyCar.toString());}
}

在这个示例代码中,我们定义了一个产品类 Car,其中包含了三个部件(发动机、车轮和车身)。然后,我们定义了一个抽象建造者类 CarBuilder,其中定义了创建产品对象各个部件的接口,同时包含了一个返回组装好的产品对象的方法。接着,我们定义了两个具体建造者类 SportsCarBuilderFamilyCarBuilder,分别实现了抽象建造者接口中的方法,从而实现了创建不同类型的 Car 对象的具体方法。最后,我们定义了一个指挥者类 CarDirector,它包含一个建造者对象,并定义了一个构建方法来组装不同类型的 Car 对象。

在客户端代码中,我们创建了两个具体建造者对象(SportsCarBuilderFamilyCarBuilder),并将它们分别传递给 CarDirector 对象中。然后,我们通过 CarDirector 中定义的构建方法来组装不同类型的 Car 对象,并通过 getCar() 方法获取到组装好的对象。最后,我们输出这些对象的属性信息。

这个示例代码中使用了建造者模式来创建不同类型的汽车对象,通过将创建过程分离到不同的建造者对象中,从而简化了创建过程,并且可以通过不同的建造者对象来创建不同类型的对象。

3、为什么需要使用建造者模式?

需要使用建造者模式有以下几个原因:// 创建复杂对象

  1. 简化复杂对象的创建过程:有些对象的创建过程非常复杂,需要多个步骤和复杂的逻辑才能完成。使用建造者模式可以将对象的创建过程分解为多个简单的步骤,使得代码更加可读和易于维护。

  2. 提高代码的可扩展性:使用建造者模式可以方便地扩展对象的创建过程,可以在不影响其他代码的情况下添加新的建造者对象和创建步骤。

  3. 降低耦合性:使用建造者模式可以将对象的创建过程和表示分离开来,降低对象的表示和创建之间的耦合性。

  4. 使代码更加灵活:使用建造者模式可以动态地改变对象的创建过程,可以根据需要动态地选择建造者对象和创建步骤。

4、建造者模式与工厂方法模式有什么区别?

建造者模式和工厂方法模式都是用于创建对象,但它们的目的和应用场景略有不同。

  1. 目的不同:建造者模式的主要目的是将一个复杂对象的创建过程分解为多个简单的步骤,使得代码更加可读和易于维护。而工厂方法模式的主要目的是定义一个用于创建对象的接口,让子类决定实例化哪一个类,使得代码更加灵活。

  2. 返回值不同:建造者模式返回一个组装好的完整对象,而工厂方法模式则返回一个具体类型的对象。

  3. 适用场景不同:建造者模式适用于需要创建复杂对象,对象的创建过程比较复杂,需要多个步骤和复杂的逻辑才能完成的情况。而工厂方法模式适用于需要创建多种类型的对象,对象的创建过程比较简单的情况。

举个例子,比如我们要创建一辆汽车,如果汽车的创建过程非常复杂,需要多个步骤和复杂的逻辑才能完成,那么我们可以使用建造者模式。如果我们只需要创建几种不同类型的汽车,而且每种汽车的创建过程比较简单,那么我们可以使用工厂方法模式。

什么是工厂方法模式?点击这里《工厂方法模式》。

// 总的来说,就是建造者模式用来创建复杂的对象,工厂模式用来创建简单对象

Java设计模式之建造者模式(精髓版)相关推荐

  1. Java设计模式(建造者模式-适配器模式-桥接模式)

    Java设计模式Ⅲ 1.建造者模式 1.1 建造者模式概述 1.2 建造者模式的注意事项和细节 1.3 代码理解 2.适配器模式 2.1 类适配器模式 2.1.1 代码理解 2.2 对象适配器模式 2 ...

  2. 折腾Java设计模式之建造者模式

    博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...

  3. java设计模式 建造模式_理解java设计模式之建造者模式

    理解java设计模式之建造者模式 发布于 2020-12-10| 复制链接 摘记: 建造者模式(Builder Pattern)主要用于"分步骤构建一个复杂的对象",在这其中&qu ...

  4. java设计模式之建造者模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  5. JAVA设计模式之建造者模式

    转自 JAVA设计模式之建造者模式 建造者模式(Builder)的定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式是一步一步创建一个复杂对象的创建型 ...

  6. 一文弄懂Java设计模式之建造者模式:图解+游戏角色生成实例

    文章目录 详解Java设计模式之建造者模式 案例引入建造者模式 建造者模式 定义 UML类图表示 模式结构 案例分析与代码实现 案例类图实现 代码结构 代码实现 结果分析 指挥者类的深入讨论 钩子方法 ...

  7. (设计模式四)java设计模式之建造者模式

    建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 1.解决的问题 平常一般创建对象,需要new,然后通过set方法给每个属性设置,当创建多个对象的时候,代码重复性 ...

  8. 【Java设计模式】建造者模式(案例详解)

    [辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...

  9. 【Java设计模式】建造者模式、原型模式

    建造者模式 (1)需要建造很多零件 (2)需要装配起来 通常用于构建一些复杂的对象.可能需要和工厂模式互相搭配. • 场景: – 我们要建造一个复杂的产品.比如:神州飞船,Iphone.这个复杂的产品 ...

最新文章

  1. 拥抱iPhone,拥抱软件开发的未来
  2. 十二个任务 分给三个线程处理
  3. Windows安装MongoDB
  4. HDOJ 1056 HangOver
  5. 使用TMG2010企业版组建大型***网络之3-配置NLB
  6. 【双100%解法】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
  7. PHP和Mysql处理IP地址
  8. symbian 中自动寻找cmwap连接点,通杀uiq 2nd 3nd和s60 2nd 3nd 5nd
  9. LeetCode 1553. 吃掉 N 个橘子的最少天数(BFS)
  10. kotlin 扩展类的功能_Kotlin程序| 扩展功能功能
  11. sql查询oracle数据,sql-server – 从SQL Server查询Oracle数据库
  12. 10.3 考试 (考得不好)
  13. python串口数据绘图_使用Python串口实时显示数据并绘图的例子
  14. Linux创建SSH信任关系
  15. Andrew Ng(coursera)单变量线性回归(LINEAR REGRESSION WITH ONE VARIABLE)
  16. ASP.NET MVC3官方示例Music Store(音乐商店) --简易中文教程
  17. windows xp虚拟机安装教程
  18. 笔记本打印时出现打印机出现异常配置问题_笔记本电脑连接共享打印机出现错误怎么办...
  19. 女性游戏市场崛起,B站能否能否抓住风口打造下一个FGO?
  20. hibernate 检索策略

热门文章

  1. 2015广州强网杯 致敬经典
  2. python函数可以改变哪种数据类型的实参_Python函数参数的几种类型
  3. if_salv_gui_table_ida 实现 CDS VIEW ALV
  4. linux下播放蓝光iso,如何播放蓝光原盘ISO文件?
  5. 为什么我觉得软件测试是一个有前途的行业?
  6. python数据可视化之matplotlib精进pdf_Python数据可视化之matplotlib精进
  7. mongodb 查询操作,条件查询,where,find等常用操作
  8. mysql truncate 大表_MySQL删除大表时潜在的问题(drop table,truncate table)
  9. C语言函数大全-- s 开头的函数(3)
  10. 美国计算机硕士学校,美国计算机硕士不同学校申请难度大盘点(下篇)