【设计模式】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)

大家都在看

  • centos 7 安装KVM

    一、安装KVM 实验环境如下: 虚拟机版本:VMware 12.5.7虚拟机需要开启虚拟化,如下图: 系统版本:CentOS Linux release 7.5.1804 (Cor…

    Linux 2023年6月7日
    082
  • WPF 将控件放入到 UserControl 里获取 HwndSource 为空的情况

    本文记录将 WPF 控件放入到 UserControl 里,如果此 UserControl 没有被设置 Visibility 为可见过,那么放在此 UserControl 内的控件…

    Linux 2023年6月6日
    076
  • Docker Manager for Kubernetes

    一、Kubernetes介绍 Kubernets是Google开源的容器集群系统,是基于Docker构建一个容器的调度服务,提供资源调度,均衡容灾,服务注册,动态伸缩等功能套件; …

    Linux 2023年6月14日
    072
  • 【微服务】- 服务调用-OpenFeign

    服务调用 – OpenFeign 😄生命不息,写作不止🔥 继续踏上学习之路,学之分享笔记👊 总有一天我也能像各位大佬一样🏆 一个有梦有戏的人 @怒放吧德德🌝分享学习心得…

    Linux 2023年6月6日
    083
  • node热加载

    node可以通过require热加载文件,这里先提一下require的加载方式:当我们第一次使用require加载模块时require会把被加载文件的绝对路径作为key存放在req…

    Linux 2023年6月14日
    085
  • 设置Docker的默认文件存储位置

    对于windows下,直接修改docker desktop界面的配置项目。对于rocky linux下面,对应的配置文件存储在: vim /etc/docker/daemon.js…

    Linux 2023年6月6日
    064
  • Redis源码系列(二)

    Redis源码系列——双链表 redis底层的数据结构使用了双链表,其实现很简洁,值得阅读。 原型 src/adlist.h /*list node*/ typedef struc…

    Linux 2023年6月8日
    094
  • 认识2020年的苹果设计奖获奖者

    苹果设计奖表彰那些在苹果平台上反映最佳设计、创新和技术的开发者的创造性艺术和技术成就。 塑钢3DShapr3D Zrt. 运行CAD软件通常需要一台具有相当处理能力的台式电脑。Sh…

    Linux 2023年6月7日
    066
  • shell笔记

    shell脚本学习笔记 1.Shell入门简介 Shell是操作系统的最外层, Shell可以合并编程语言以控制进程和文件,以及启动和控制其它程序。shell通过提示您输入,向操作…

    Linux 2023年6月7日
    060
  • MAC安装redis

    一、安装命令使用mac的包管理工具brew一行命令搞定安装。若未安装brew,命令行先输入以下命令安装brew。 /usr/bin/ruby -e “$(curl -f…

    Linux 2023年5月28日
    084
  • Linux安装cmatrix代码雨教程

    一:介绍 cmatrix代码雨是Linux的系统屏保界面;执行cmatrix不仅可以练习简单的编译安装软件三部曲,还可以执行cmatrix命令做出代码雨,提升文化实力 二:成品演示…

    Linux 2023年5月27日
    098
  • 个人学习-STL深入学习01-vectory源码研习 // 需要补充

    STL,即标准模板库(Standard Template Library,STL),内部封装了常见的容器和算法。由六部分组成:1.容器(Containers)2.分配器(Alloc…

    Linux 2023年6月6日
    072
  • 【转载】Springboot整合 一 集成 redis

    原文:http://www.ityouknow.com/springboot/2016/03/06/spring-boot-redis.html https://blog.csdn…

    Linux 2023年5月28日
    095
  • redis五种数据类型及使用场景

    一、Redis简介Redis 是一个开源的使用 C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库。它可以用作数据库、缓存和消息中间件。它支持的数据类…

    Linux 2023年5月28日
    078
  • WPF 界面打不开提示 System.ArithmeticException Overflow or underflow in the arithmetic operation 异常

    本文告诉大家如何解决界面打不开,抛出 System.ArithmeticException: Overflow or underflow in the arithmetic ope…

    Linux 2023年6月6日
    071
  • Linux vi/vim

    1.vi/vim快捷键位图 详细可以参考:https://www.runoob.com/w3cnote/all-vim-cheatsheat.html 2.vi/vim的三种模式 …

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