【设计模式】Java设计模式-建造者模式

【设计模式】Java设计模式 – 建造者模式

😄 不断学习才是王道
🔥 继续踏上学习之路,学之分享笔记
👊 总有一天我也能像各位大佬一样
🏆 @一个有梦有戏的人 @怒放吧德德
🌝分享学习心得,欢迎指正,大家一起学习成长!

虽然很疲倦,但也要坚持学习!!!

简介

构建者是一种可以将复杂对象的构建和表示分离开来,从而使得一个构建过程可以生成多个不同的表示对象。建造者模式通过一步一步构建对象。
在构建对象可以通过new的方式或者工厂模式去实例化对象,但是有些对象就比较复杂,有些对象会不断的细分,并且不用类型的对象有不同的对象。倘若通过new或者工厂模式也会造成许多不变,由此可以通过Builder模式,既然集体构建比较复杂,那就一步一步的构建。

举个例子,就比如班车票,对于不同的对象有不同的优惠和规定。

【设计模式】Java设计模式-建造者模式

通过配置类去统筹,在吧所有信息交给构建器去一个一个构建。等所有的票都构建完成之后,我们在通过构建器来构建套票对象。这样层层递进就会使得不这么复杂

【设计模式】Java设计模式-建造者模式

建造者模式实例

本次实验通过配置类、构建类来完成,通过配置类做好各个方法来模拟对应票类的逻辑构造,通过构建器构建套票对象

①、定义配置类

通过不同的类型去构建不同的票类逻辑

package com.lyd.demo.builder.helper;

/**
 * @Author: lyd
 * @Description: 票的配置类
 * @Date: 2022-08-23
 */
public class TicketHelper {
    public void buildAdult(String info) {
        // TODO 编写逻辑
        System.out.println("构建成年人票逻辑:" + info);
    }

    public void buildChildrenForSeat(String info) {
        // TODO 编写逻辑
        System.out.println("构建有座儿童票逻辑:" + info);
    }

    public void buildchildrenForSeat(String info) {
        // TODO 编写逻辑
        System.out.println("构建无座儿童票逻辑:" + info);
    }

    public void buildElderly(String info) {
        // TODO 编写逻辑
        System.out.println("构建老年人票逻辑:" + info);
    }

    public void buildSoldier(String info) {
        // TODO 编写逻辑
        System.out.println("构建军人及其家属票逻辑:" + info);
    }
}

②、定义构建类

Builder类比较简单,只有一个helper类,但是可以获得套票中的所有信息,从而构建出套票对象

package com.lyd.demo.builder;

import com.lyd.demo.builder.helper.TicketHelper;

/**
 * @Author: lyd
 * @Description: 构建类
 * @Date: 2022-08-23
 */
public class TickerBuilder {
    public static Object builder(TicketHelper helper) {
        // TODO 构建逻辑
        System.out.println("通过TickerBuilder构建票信息");
        return null; // 返回票的对象
    }
}

③、构建套票对象

通过TicketHelper去构建信息,在通过builder去构建出对象。

package com.lyd.demo.builder.test;

import com.lyd.demo.builder.TickerBuilder;
import com.lyd.demo.builder.helper.TicketHelper;

/**
 * @Author: lyd
 * @Description: 测试类
 * @Date: 2022-08-20
 */
public class TickerBuilderTest {
    public static void main(String[] args) {
        TicketHelper helper = new TicketHelper();
        helper.buildAdult("成人票");
        helper.buildChildrenForSeat("有座儿童票");
        helper.buildchildrenForSeat("无座儿童票");
        helper.buildElderly("老人票");
        helper.buildSoldier("军人票");
        Object ticker = TickerBuilder.builder(helper);
    }
}

运行结果:

【设计模式】Java设计模式-建造者模式

💓德德小建议:

理解设计模式不是一件简单的事情,需要不断的学习和动手去练习,才能理解。只有掌握好设计模式,才能够真正的理解SpringAOP和Mybatis的底层原理。各位读者可以和我一样,动手敲一敲代码,甚至用不同的例子来做,通过debug一步一步调试,还有就是多看看别人的例子。能够有助于理解!谢谢各位观看指点!❤️ ❤️ ❤️

Original: https://www.cnblogs.com/lyd-code/p/16658632.html
Author: 怒放吧德德
Title: 【设计模式】Java设计模式-建造者模式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/574140/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 三分钟永久激活WebStorm、PHPStorm、PyCharm、IntelliJ IDEA等JetBrains系列IDE

    前言 本文讲解如何永久激活WebStorm、PHPStorm、PyCharm、IntelliJ IDEA等JetBrains系列IDE,亲测有效,操作简单,一次激活,永久有效,一劳…

    Linux 2023年6月7日
    0133
  • Docker 打包部署web项目 [Dockerfile方式]

    系统环境 IDE: IDEA 2020.2 Linux: WSL2 Ubuntu 20.04 Docker: 20.10.8 参考资料 博客园: Dockerfile常用指令介绍 …

    Linux 2023年6月14日
    0104
  • 学习

    1.1、参考博客 参考的教程如下: Original: https://www.cnblogs.com/agui125/p/16032402.htmlAuthor: 风御之举Tit…

    Linux 2023年6月13日
    0102
  • 解决pip下载慢

    临时使用 可以在使用pip的时候加参数 -i https://pypi.tuna.tsinghua.edu.cn/simple 设为默认 pip install pip -U -i…

    Linux 2023年6月13日
    090
  • Linux系统查看磁盘可用空间的5个命令

    大家好,我是良许。 工作中,经常会遇到磁盘爆满的情况,尤其是一台服务器运行了 N 年之后,里面会充满各种各样垃圾文件,比如:编译产生的中间文件、打包的镜像文件、日志文件,等等。 别…

    Linux 2023年6月14日
    096
  • 如何在 pyqt 中解决启用 DPI 缩放后 QIcon 模糊的问题

    问题描述 如今显示器的分辨率越来越高,如果不启用 DPI 缩放,软件的字体和图标在高分屏下就会显得非常小,看得很累人。从 5.6 版本开始,Qt 便能支持 DPI 缩放功能,Qt6…

    Linux 2023年6月7日
    0204
  • shell 脚本 根据PID过滤查看进程所有信息

    根据PID过滤查看进程所有信息 #!/bin/bash read -p "输入要查询的PID: " P #筛选第二列等于输入的PID号 n=ps aux | a…

    Linux 2023年5月27日
    0123
  • 最小生成树-Kruskal算法

    与 Prim算法贪心选择不同,Kruskal算法采取 每次选择权值最小的边的方法,这样,在 不构成环且最后能够连接完所有边它们的权重和一定是最小的。 和之前Prim算法的图一样,便…

    Linux 2023年6月7日
    0117
  • 剑指offer计划20( 搜索与回溯算法中等)—java

    1.1、题目1 剑指 Offer 07. 重建二叉树 1.2、解法 注释解法。 1.3、代码 class Solution { int[] preorder; HashMap ma…

    Linux 2023年6月11日
    0104
  • Centos部署Loki日志聚合系统

    有关一些日志聚合的起源和原则,请参阅我的另一篇文章“用于编程入门的日志聚合系统”。 [En] For the origin and principles of some log a…

    Linux 2023年5月27日
    075
  • GCC 内联汇编基础

    GCC 内联汇编 在 MIT6.828的实验中,有几处用到了很底层的函数,都以内联汇编的形式存在,例如 static inline uint32_t read_esp(void) …

    Linux 2023年6月8日
    086
  • 【Example】C++ std::thread 及 std::mutex

    与 Unix 下的 thread 不同的是,C++ 标准库当中的 std::thread 功能更加简单,可以支持跨平台特性。 因此在项目需要跨平台及对多线程简单应用情况下,应优先考…

    Linux 2023年6月13日
    064
  • Linux 学习笔记

    Linux 学习笔记 作者:Grey 原文地址: 博客园:Linux 学习笔记 CSDN:Linux 学习笔记 说明 本文如果没有特别说明,环境是 CentOS 7, 主要是日常学…

    Linux 2023年5月27日
    0117
  • mac如何安装FinalShell

    1、Mac一键安装脚本: curl -o finalshell_install.sh www.hostbuf.com/downloads/finalshell_install.sh…

    Linux 2023年5月28日
    0100
  • Java刷题笔记7.25

    一个类构造方法的作用是什么? 主要是完成对&am…

    Linux 2023年6月7日
    0111
  • 小白上手Linux系统Redis安装与部署教程

    一:Redis的安装 1.首先需要下载linux版的redis,官网地址:http://redis.io/download。 2.创建文件夹 mkdir+文件名 3.用ftp将压缩…

    Linux 2023年6月13日
    0137
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球