设计模式-构建者

ops/2024/11/13 13:57:58/

构建者是一种用于创建对象时将对象的构建过程和表示分离的设计模式,适用于构造过程复杂的对象和创建需要多种变化的场景使用.

例如一个汽车是一个抽象概念,车会具体到很多种,不同的发动机,车身,轮胎等等构建一个具体的车,所以这个具体对象创建有很多种可能.因此可以使用构建者设计模式

代码示例:

public class Car{

  private Engine engine; //发动机

  private Tire tire;  //轮胎

  private Body body; //车身

//私有化构造方法,让外部无法创建对象

 private Car(Builer builder){

  this.engine = builder.engine;

  this.tire = builder.tire;

  this.body = builder.body;

}

//构建者内部类

public static class Builder{

    private Engine engine; //发动机

     private Tire tire;  //轮胎

    private Body body; //车身

  public Builder setEngine(Engine engine){

     this.engine = engine;

     return this;

}

  public Builder setTire(Tire tire){

     this.tire= tire;

     return this;

}

  public Builder setBody(Body body){

     this.body= body;

     return this;

}

public Car build(){

  return new Car(this);

}

        Car car = new Car.Builder().setEngine(new Engine("V8")).setTire(new Tire("20 inch")).setBody(new Body("Sedan")).build();

优点:构建者能够让构建过程更加清晰明了

         调用者不知道内部的构建细节

         可以写多个构建者,用不同的方式构建同样的对象

         新的构建者不影响已有的代码,符合开闭原则

缺点:增加了代码量

        简单的对象创建用不到,强行使用会导致大量的构建者让代码复杂

       构建者创建的对象如果没有set方法,就不能修改了.


http://www.ppmy.cn/ops/132521.html

相关文章

VScode插件:前端每日一题

简单说下你对 HTTP2 的理解 HTTP/2 是 HTTP 协议的一个改进版本,旨在提升网络传输的速度和效率,主要改进点包括: 多路复用:允许多个请求和响应在同一个 TCP 连接中并行传输,避免 HTTP/1.x 的“队头阻塞”问题。 头部压…

【HarmonyOS】not supported when useNormalizedOHMUrl is not true.

【HarmonyOS】 not supported when useNormalizedOHMUrl is not true. 问题背景: 集成三方库编译时,IDE提示报错信息如下: hvigor ERROR: Bytecode HARs: [cashier_alipay/cashiersdk] not supported when useNormalizedOHMUrl is not true…

MySQL 数据库之库操作

文章目录 1. 什么是数据库2. 基础概念2.1 连接数据库2.2 服务器,数据库,表关系2.3 SQL分类 3. 库的操作3.1 创建,选择,查看数据库3.2 字符集和默认校验规则 3.3 操纵数据库3.3.1 数据库查看3.3.2 数据库删除3.3.3 数据库修改 4. 其…

设计模式小结一观察者(Observer)模式

先上结论: 这是一个开发者经常用到但你可能没有意识到的设计模式,当前Android客户端开发经常用到的几大流行框架:LiveData、RxJava、EventBus等的核心都是采用此种设计模式思想。讲到这里,还不赶紧研究下这几个开源框架的源码,不然面试问的深入一点你就露馅了! 开干! …

vue大疆建图航拍功能实现

介绍 无人机在规划一块区域的时候,我们需要手动的给予一些参数来影响无人机飞行,对于一块地表,无人机每隔N秒在空中间隔的拍照地表的一块区域,在整个任务执行结束后,拍到的所有区域照片能够完整的表达出一块地表&…

Greiner 经典力学(多体系统和哈密顿力学)第十一章 学习笔记(Rotation About a Fixed Axis)

第十一章 学习笔记(Rotation About a Fixed Axis) 这一章主要引入了力偶的概念。一对作用在刚体上方向相反,大小相同的力称为力偶。**力偶 ** 对刚体上任意一点的力矩都是相同的。 D l F \mathbf D \mathbf l \times \mathbf F DlF 其中…

Flutter鸿蒙next 中使用 MobX 进行状态管理

引言 在 Flutter 中,状态管理是开发过程中至关重要的一部分。Flutter 提供了多种方式来管理应用的状态,如 Provider、Riverpod、BLoC 等。除了这些,MobX 也是一个流行的状态管理库。MobX 是一个响应式编程库,基于观察者模式&…

ctfshow(316,317,318)--XSS漏洞--反射性XSS

反射型XSS相关知识 Web316 进入界面: 审计 显示是关于反射性XSS的题目。 思路 首先想到利用XSS平台解题,看其他师傅的wp提示flag是在cookie中。 当前页面的cookie是flagyou%20are%20not%20admin%20no%20flag。 但是这里我使用XSS平台,…