网红小王如何运用建造者模式,一步步定制专属豪车?

2026-04-19 12:121阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1998个文字,预计阅读时间需要8分钟。

网红小王如何运用建造者模式,一步步定制专属豪车?

一、前言本文章是关于设计模式中的建造者模式的,也称为Builder Pattern。在展开讲解之前,我们先简要了解一下该模式的基本定义。

建造者模式(Builder Pattern)是一种设计模式,它将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。下面是本文章的内容:

1. 建造者模式的基本定义

2.建造者模式的结构

3.建造者模式的应用场景

4.建造者模式的优缺点

接下来,我们将对建造者模式进行详细的解析。

一、前言

本文章是关于设计模式中的建造者模式的,也称构建者模式/生成器模式,英文我们称之为Builder Pattern。在开展讲解之前,我们先把该模式的定义了解一下。

建造者模式的定义:

该模式可以实现产品的封装构造过程,并允许按步骤构造产品。

该模式的优点:

可以将一个复杂对象的创建过程封装起来,允许对象通过多个步骤来创建,并且可以改变过程;它也可以向客户隐藏产品内部的表现;因为客户只看到一个抽象接口,所以产品的具体实现是可以被替换的。

用途:

经常被用来创建组合结构。

缺点:

与工厂模式相比,采用生成器模式创建对象的客户,需要具备更多的领域知识。

二、讲个小故事

小王家境一般,但是呢,通过自己的努力成为了一个小网红,收入也逐渐多了起来。他从小就羡慕开汽车的人,所以,自己也决定买辆车。

他首先去了奥迪的4s店,车子很多,也很不错。4S店的销售人员给他介绍了很多车型,他看中了奥迪的A4L,各方面都挺喜欢的,然后就打算付款了。

正在这个时候,他的助理给他打电话,“小王!榜一大哥准备签约你了!签约费用给你1000万!你发达了!”,小王一听,高兴坏了,这不一下子鸡窝变凤凰了嘛!他挂断电话,觉得自己得买一辆更独特的汽车,而不是大街上较为常见的A4L了,然后他问销售人员,这个车我能自己定制不?销售人员说,我们只有一些选配项,定制不了。小王很失望,他太想拥有一辆“专属”自己的车子了。

这个时候,销售人员建议他,去看一看保时捷,定制的项目非常多。然后呢,他就去了保时捷4s店,从那边他发现,从小的轮毂logo,再到外观中控,都能选配和定制,这就太好了,他选了好多自己喜欢的定制型,这样,一辆完完全全“专属”小王的保时捷跑车就定制好了。

三、模式的使用方式

从上面的例子我们可以看到,对于普通汽车来说,大多采用固定的一些配置项,我们获得的汽车往往没有特殊化定制的需求,那么这种情况,我们通过工厂方法或者抽象工厂就可以满足需求。

但是对于高端客户,往往需要定制化的东西比较多,那么创建出来的实例对象也更为复杂和灵活,对于这种场景,我们就可以通过Builder模式来进行对象的创建了。

所以,当我们需要自定义各种对象的细节部分,然后最终拼装出一个个性化实例对象时,就非常适合采用建造者模式。

获得一个车架子,拼装车门,拼装轮胎,拼装发动机,拼装变速箱……,然后获得最终的个性化汽车。

3.1> 类图

在通过上面的例子了解了建造者模式之后,我们就通过类图的方式,展示一下该模式。在下图中,我们提供了两种场景:分别是客户不可定制客户可以定制,具体选择哪种实现方式,可以根据具体的业务场景来自行选择:

3.2> 代码实现

创建一个汽车实体类Car,里面包含4个组件,分别是:汽车引擎(engine)、变速齿轮(gear)、车门(door)和汽车轮胎(wheel),代码如下所示:

@ToString @Data @NoArgsConstructor @AllArgsConstructor public class Car { private String engine = "普通标准的发动机"; private String gear = "普通标准的齿轮"; private String door = "普通标准的车门"; private String wheel = "普通标准的轮胎"; }

创建构造器接口Builder,提供安装引擎(initalEngine)、安装齿轮(initalGear)、安装车门(initalDoor)、安装轮胎(initailWheel)等功能:

public interface Builder { // 安装引擎 Builder initalEngine(String engine); // 安装齿轮 Builder initalGear(String gear); // 安装车门 Builder initalDoor(String door); // 安装轮胎 Builder initailWheel(String wheel); // 获得构建后的汽车 Car getCar(); }

根据Builder接口,实现创建奥迪车的Builder实现类——AudiBuilder:

网红小王如何运用建造者模式,一步步定制专属豪车?

public class AudiBuilder implements Builder { private Car car; public AudiBuilder() { car = new Car("Audi普通的发动机", "Audi普通标准的齿轮", "Audi普通标准的车门", "Audi普通标准的轮胎"); } @Override public Builder initalEngine(String engine) { car.setEngine(engine); return this; } @Override public Builder initalGear(String gear) { car.setGear(gear); return this; } @Override public Builder initalDoor(String door) { car.setDoor(door); return this; } @Override public Builder initailWheel(String wheel) { car.setWheel(wheel); return this; } @Override public Car getCar() { return car; } }

根据Builder接口,实现创建宝马车的Builder实现类——BMWBuilder:

public class BMWBuilder implements Builder { private static Car car = new Car("BMW普通的发动机", "BMW普通标准的齿轮", "BMW普通标准的车门", "BMW普通标准的轮胎"); @Override public Builder initalEngine(String engine) { car.setEngine(engine); return this; } @Override public Builder initalGear(String gear) { car.setGear(gear); return this; } @Override public Builder initalDoor(String door) { car.setDoor(door); return this; } @Override public Builder initailWheel(String wheel) { car.setWheel(wheel); return this; } @Override public Car getCar() { return car; } }

创建工人类Worker,这个工人可以创建奥迪A4L型号汽车(createA4LCar)和奥迪R8跑车(createR8Car),也可以创建普通的宝马汽车(createCommonBMW):

public class Worker { Car createA4LCar() { return new AudiBuilder(). initalEngine("Audi的4缸发动机"). initalGear("6速双离合变速箱").getCar(); } Car createR8Car() { return new AudiBuilder(). initalEngine("16缸跑车引擎"). initalDoor("碳纤维轻量级车门"). initalGear("7档湿式双离合变速箱"). initailWheel("米其林Top2竞速级轮胎").getCar(); } Car createCommonBMW() { return new BMWBuilder().getCar(); } }

创建测试类BuilderTest,使得工人创建奥迪A4L、奥迪R8跑车和普通的宝马汽车:

public class BuilderTest { public static void main(String[] args) { Worker worker = new Worker(); Car audiR8 = worker.createR8Car(); Car audiA4L = worker.createA4LCar(); Car commonBMW = worker.createCommonBMW(); System.out.println("audiR8=" + audiR8); System.out.println("audiA4L=" + audiA4L); System.out.println("commonBMW=" + commonBMW); } }

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

本文共计1998个文字,预计阅读时间需要8分钟。

网红小王如何运用建造者模式,一步步定制专属豪车?

一、前言本文章是关于设计模式中的建造者模式的,也称为Builder Pattern。在展开讲解之前,我们先简要了解一下该模式的基本定义。

建造者模式(Builder Pattern)是一种设计模式,它将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。下面是本文章的内容:

1. 建造者模式的基本定义

2.建造者模式的结构

3.建造者模式的应用场景

4.建造者模式的优缺点

接下来,我们将对建造者模式进行详细的解析。

一、前言

本文章是关于设计模式中的建造者模式的,也称构建者模式/生成器模式,英文我们称之为Builder Pattern。在开展讲解之前,我们先把该模式的定义了解一下。

建造者模式的定义:

该模式可以实现产品的封装构造过程,并允许按步骤构造产品。

该模式的优点:

可以将一个复杂对象的创建过程封装起来,允许对象通过多个步骤来创建,并且可以改变过程;它也可以向客户隐藏产品内部的表现;因为客户只看到一个抽象接口,所以产品的具体实现是可以被替换的。

用途:

经常被用来创建组合结构。

缺点:

与工厂模式相比,采用生成器模式创建对象的客户,需要具备更多的领域知识。

二、讲个小故事

小王家境一般,但是呢,通过自己的努力成为了一个小网红,收入也逐渐多了起来。他从小就羡慕开汽车的人,所以,自己也决定买辆车。

他首先去了奥迪的4s店,车子很多,也很不错。4S店的销售人员给他介绍了很多车型,他看中了奥迪的A4L,各方面都挺喜欢的,然后就打算付款了。

正在这个时候,他的助理给他打电话,“小王!榜一大哥准备签约你了!签约费用给你1000万!你发达了!”,小王一听,高兴坏了,这不一下子鸡窝变凤凰了嘛!他挂断电话,觉得自己得买一辆更独特的汽车,而不是大街上较为常见的A4L了,然后他问销售人员,这个车我能自己定制不?销售人员说,我们只有一些选配项,定制不了。小王很失望,他太想拥有一辆“专属”自己的车子了。

这个时候,销售人员建议他,去看一看保时捷,定制的项目非常多。然后呢,他就去了保时捷4s店,从那边他发现,从小的轮毂logo,再到外观中控,都能选配和定制,这就太好了,他选了好多自己喜欢的定制型,这样,一辆完完全全“专属”小王的保时捷跑车就定制好了。

三、模式的使用方式

从上面的例子我们可以看到,对于普通汽车来说,大多采用固定的一些配置项,我们获得的汽车往往没有特殊化定制的需求,那么这种情况,我们通过工厂方法或者抽象工厂就可以满足需求。

但是对于高端客户,往往需要定制化的东西比较多,那么创建出来的实例对象也更为复杂和灵活,对于这种场景,我们就可以通过Builder模式来进行对象的创建了。

所以,当我们需要自定义各种对象的细节部分,然后最终拼装出一个个性化实例对象时,就非常适合采用建造者模式。

获得一个车架子,拼装车门,拼装轮胎,拼装发动机,拼装变速箱……,然后获得最终的个性化汽车。

3.1> 类图

在通过上面的例子了解了建造者模式之后,我们就通过类图的方式,展示一下该模式。在下图中,我们提供了两种场景:分别是客户不可定制客户可以定制,具体选择哪种实现方式,可以根据具体的业务场景来自行选择:

3.2> 代码实现

创建一个汽车实体类Car,里面包含4个组件,分别是:汽车引擎(engine)、变速齿轮(gear)、车门(door)和汽车轮胎(wheel),代码如下所示:

@ToString @Data @NoArgsConstructor @AllArgsConstructor public class Car { private String engine = "普通标准的发动机"; private String gear = "普通标准的齿轮"; private String door = "普通标准的车门"; private String wheel = "普通标准的轮胎"; }

创建构造器接口Builder,提供安装引擎(initalEngine)、安装齿轮(initalGear)、安装车门(initalDoor)、安装轮胎(initailWheel)等功能:

public interface Builder { // 安装引擎 Builder initalEngine(String engine); // 安装齿轮 Builder initalGear(String gear); // 安装车门 Builder initalDoor(String door); // 安装轮胎 Builder initailWheel(String wheel); // 获得构建后的汽车 Car getCar(); }

根据Builder接口,实现创建奥迪车的Builder实现类——AudiBuilder:

网红小王如何运用建造者模式,一步步定制专属豪车?

public class AudiBuilder implements Builder { private Car car; public AudiBuilder() { car = new Car("Audi普通的发动机", "Audi普通标准的齿轮", "Audi普通标准的车门", "Audi普通标准的轮胎"); } @Override public Builder initalEngine(String engine) { car.setEngine(engine); return this; } @Override public Builder initalGear(String gear) { car.setGear(gear); return this; } @Override public Builder initalDoor(String door) { car.setDoor(door); return this; } @Override public Builder initailWheel(String wheel) { car.setWheel(wheel); return this; } @Override public Car getCar() { return car; } }

根据Builder接口,实现创建宝马车的Builder实现类——BMWBuilder:

public class BMWBuilder implements Builder { private static Car car = new Car("BMW普通的发动机", "BMW普通标准的齿轮", "BMW普通标准的车门", "BMW普通标准的轮胎"); @Override public Builder initalEngine(String engine) { car.setEngine(engine); return this; } @Override public Builder initalGear(String gear) { car.setGear(gear); return this; } @Override public Builder initalDoor(String door) { car.setDoor(door); return this; } @Override public Builder initailWheel(String wheel) { car.setWheel(wheel); return this; } @Override public Car getCar() { return car; } }

创建工人类Worker,这个工人可以创建奥迪A4L型号汽车(createA4LCar)和奥迪R8跑车(createR8Car),也可以创建普通的宝马汽车(createCommonBMW):

public class Worker { Car createA4LCar() { return new AudiBuilder(). initalEngine("Audi的4缸发动机"). initalGear("6速双离合变速箱").getCar(); } Car createR8Car() { return new AudiBuilder(). initalEngine("16缸跑车引擎"). initalDoor("碳纤维轻量级车门"). initalGear("7档湿式双离合变速箱"). initailWheel("米其林Top2竞速级轮胎").getCar(); } Car createCommonBMW() { return new BMWBuilder().getCar(); } }

创建测试类BuilderTest,使得工人创建奥迪A4L、奥迪R8跑车和普通的宝马汽车:

public class BuilderTest { public static void main(String[] args) { Worker worker = new Worker(); Car audiR8 = worker.createR8Car(); Car audiA4L = worker.createA4LCar(); Car commonBMW = worker.createCommonBMW(); System.out.println("audiR8=" + audiR8); System.out.println("audiA4L=" + audiA4L); System.out.println("commonBMW=" + commonBMW); } }

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」