Java建造者模式构建复杂对象的最佳实践
作者:.番茄炒蛋 发布时间:2021-06-27 10:07:16
标签:Java,建造者模式,设计模式
介绍
Java中的建造者模式是一种创建型设计模式,它的主要目的是为了通过一系列简单的步骤构建复杂的对象,允许创建复杂对象的不同表示形式,同时隐藏构造细节.它能够逐步构建对象,即先创建基本对象,然后逐步添加更多属性或部件,直到最终构建出完整的对象.
该模式的主要思想是将对象的构造过程分解成多个步骤,每个步骤都可以独立运行,并且在每个步骤完成后都可以返回一个中间状态,然后使用一个导演类来协调这些步骤,最终创建出完整的对象.
建造者模式通常包括一下角色:
产品类(Product):被构造出来的复杂对象,它具有多个属性或部件.
抽象构造者类(Builder):定义了构建复杂对象所需的方法和属性.
具体建造者类(ConcreteBuilder):实现抽象建造者类中定义的方法和属性,并返回最终构造的对象
导演类(Director):负责协调各个具体建造者类的构建过程,以及返回最终构造的对象,
实现
首先创建一个产品类
package com.fanqiechaodan.build;
import lombok.Data;
/**
* @Classname Car
* @Description 产品类
*/
@Data
public class Car {
private String brand;
private String model;
private String color;
private int maxSpeed;
}
其次创建抽象建造者类
package com.fanqiechaodan.build;
/**
* @Classname CarBuilder
* @Description 抽象建造者类
*/
public abstract class CarBuilder {
protected Car car;
public CarBuilder(){
car = new Car();
}
public abstract void buildBrand();
public abstract void buildModel();
public abstract void buildColor();
public abstract void buildMaxSpeed();
public Car getCar() {
return car;
}
}
然后创建具体构造者类
package com.fanqiechaodan.build;
/**
* @Classname BMWBuilder
* @Description 具体构造者类
*/
public class BMWBuilder extends CarBuilder {
@Override
public void buildBrand() {
car.setBrand("BMW");
}
@Override
public void buildModel() {
car.setModel("X6");
}
@Override
public void buildColor() {
car.setColor("Black");
}
@Override
public void buildMaxSpeed() {
car.setMaxSpeed(218);
}
}
创建导演类
package com.fanqiechaodan.build;
/**
* @Classname Director
* @Description 导演类
*/
public class Director {
private CarBuilder carBuilder;
public Director(CarBuilder carBuilder) {
this.carBuilder = carBuilder;
}
public Car constructCar() {
carBuilder.buildBrand();
carBuilder.buildColor();
carBuilder.buildMaxSpeed();
carBuilder.buildModel();
return carBuilder.getCar();
}
}
测试
package com.fanqiechaodan.build;
/**
* @Classname Demo
* @Description 建造者模式
*/
public class Demo {
public static void main(String[] args) {
CarBuilder carBuilder = new BMWBuilder();
Director director = new Director(carBuilder);
Car car = director.constructCar();
System.out.println(car.toString());
}
}
当对象需要多个步骤才能创建时,可以使用建造者模式
当需要创建多个不同的对象时,可以使用建造者模式,每个对象的构造过程可以由不同的构建器来完成
当对象的构造过程非常复杂或需要进行多项配置时,可以使用建造者模式
总的来说,建造者模式非常适合创建复杂的对象,并且使代码更加灵活和已于扩展.
来源:https://blog.csdn.net/qq_43135259/article/details/129427744


猜你喜欢
- 排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料。废话不多说,下面逐一看看经典的排
- 背景:本人不是Java开发人员,经过四年多的历练,可以说是一枚BI攻城师了吧,最近粗糙的写了一个Portal来集成cognos报表,下面就入
- ArrayList类List集合的实例化:List<String> l = new ArrayList<String>
- 1,添加依赖在project的build.gradle文件中添加dependencies { classpath 'co
- 写在前面关于数据结构,Java官方其实已经帮我们写好并封装起来了,在真正需要使用的时候直接调用即可,但为了更好的理解数据结构,我会按照源码的
- 本文实例为大家分享了Unity3D实现控制摄像机移动的具体代码,供大家参考,具体内容如下最近公司的几个项目开发内容基本相同,很多脚本直接复制
- Eclipse的Servers视图中无法添加Tomcat6/Tomcat7的方法引言: 在基于Eclipse的开发过程中,出现了无法在Ecl
- 本文实例为大家分享了winform可拖动的自定义Label控件,供大家参考,具体内容如下效果预览:实现步骤如下:(1)首先在项目上右击选择:
- 在有些情况下,有很多列表不能一次性显示完整,需要对其进行分页处理博主自己也写了一个分页系统,在这里记录下来,方便以后直接拿来使用这篇文章De
- 现工作中有需求要进行批量新增和修改实现了以下几种方式代码中foreach insert/update多线程foreach insert/up
- 介绍细心的小伙伴可能会发现,抖音新上线了IP属地的功能,小伙伴在发表动态、发表评论以及聊天的时候,都会显示自己的IP属地信息下面,我就来讲讲
- 主要为以下实现步骤:1.绑定域名先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。(特别提示不需要加上http或
- 由于最近的工作需要用到文本转语音的功能,在网上找到的资料有些不完整,特此记录下整个完整功能。这种方式的优点在于不会被浏览器限制,在js的文本
- 异常算术异常类:ArithmeticExecption空指针异常类:NullPointerException类型强制转换异常:ClassCa
- 本文实例为大家分享了Unity3d简易五子棋源码,供大家参考,具体内容如下Unity3d部分对C#源码进行了改写简化:using Unity
- 1.什么是mybatis逆向工程在使用mybatis时需要程序员自己编写sql语句,针对单表的sql语句量是很大的,mybatis官方提供了
- 下面是自己写的三个方法,直接类名.方法即可调用,注意此处未做异常处理.1.下划线转驼峰 lowerLineToHump()2.首字母大写 c
- 因为课程需要,昨天好多同学在安装Android studio3.6.1后,无法构建,不知道什么原因,我的电脑上使用的是之前3.4版本的,可以
- 前言尺子在客户端开发中有一定的应用场景,比如厘米尺、白板的画线尺、视频剪辑的时间尺。一般可以采用用户控件通过自绘的方式实现,但今天我要讲一个
- 一、编译步骤解压下载的GDAL源程序,并在命令行中切换到解压目录。tar -xzvf gdal-2.1.3.tar.gzcd gdal-2.