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

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

(0)

大家都在看

  • 向服务器发送Https请求

    <!–https请求用的包–> <dependency> <groupid>org.apache.httpcomponents</gr…

    Java 2023年6月6日
    079
  • Hibernate知识总结(一)

    一、ORM ORM的全称是Object/Relation Mapping,即对象/关系映射,可以将其理解成一种规范,它概述了这类框架的基本特征:完成面向对象的编程语言到关系数据库的…

    Java 2023年6月6日
    0107
  • 2020-为什么换了工作

    摘要 经历了一个特殊的2020上半年,疫情出乎意料的持续了半年之久,还是没有看到结束的趋势。虽然外部环境很恶劣,还是做出了个人的重大选择,换工作。期间纠结了很久,毕竟工作就是生活,…

    Java 2023年6月8日
    093
  • 群晖 docker 下nexus3 创建docker私有仓库

    登录后创建Blob Stores(docker MyDockerBlobStores) 创建docker host(可以push/pull) docker 代理仓库,可以是dock…

    Java 2023年6月6日
    070
  • spring boot 发布 jar 包转为 war

    Spring Boot 支持发布jar包和war包,它推荐的是使用jar形式发布 使用jar包比较方便,但如果是频繁修改更新的项目,需要打补丁包,那这么大的jar包上传都是问题 j…

    Java 2023年5月30日
    091
  • 数据结构基础—绪论

    数据结构基础—绪论 一、什么是数据结构 数据结构是一门研究非数值计算的程序实际问题中计算机的操作对象以及它们之间关系和操作等的学科 程序设计 = 数据结构 +算法 数据结构:问题的…

    Java 2023年6月5日
    098
  • Buuctf-Web-[极客大挑战 2019]Havefun

    前言 刷题网址:https://buuoj.cn/challenges#[极客大挑战 2019]Havefun 首先打开题目,发现是一只猫猫,如下图 二话不说直接看源代码,发现了东…

    Java 2023年6月13日
    080
  • Maven基础

    核心思想:约定大于配置其实约定大于配置这一思想在开发中经常出现当程序中的某一个或者某一些参数没有配置的时候,程序会自动设定一个默认值。这个默认值的设定,就称之为约定。意义在于:减少…

    Java 2023年6月7日
    092
  • MySQL 千万数据库深分页查询优化,拒绝线上故障!

    文章首发在公众号(龙台的技术笔记),之后同步到博客园和个人网站:xiaomage.info 优化项目代码过程中发现一个千万级数据深分页问题,缘由是这样的 库里有一张耗材 MCS_P…

    Java 2023年6月14日
    0101
  • javacv 图片合成

    java;gutter:false; /*<em> * 图片组合 </em>/ @Slf4j public class ComposeImageUtil {…

    Java 2023年5月29日
    074
  • Python对字符数据进行清洗

    import re mystr = "hahaAAA哈哈綂123./!#鱫愛" str1 = ”.join(re.findall(‘[\u4e00-\u9fa…

    Java 2023年6月8日
    072
  • SpringSecurity学习

    一、SpringSecurity框架简介 SpringSecurity基于Spring框架,提供了一套Web应用安全性的完整解决方案 一般来说,Web应用的安全性包括用户认证(Au…

    Java 2023年5月30日
    0121
  • Java(10)面向对象-使用LocalDate类完成日历设计

    在我们完成这个日历设计前,需要了解Java中的预定义类 LocalDate的一些用法 LocalDate.now() // 2022-07-01 会构造一个新对象,表示构造这个对象…

    Java 2023年6月9日
    091
  • 【Java】【51】Quartz定时器

    前言: 但是,有的时候我们的任务是动态的。比如,可以在后台添加任意个数任意时间的推送短信任务,任务没有开始之前,可以更改推送时间。这就需要用到Quartz动态添加、修改和删除定时任…

    Java 2023年5月29日
    071
  • 页面滚动到指定位置——js中scrollIntoView()的用法

    element.scrollIntoView() 参数默认为true 1.什么是scrollIntoView? scrollIntoView是一个与页面(容器)滚动相关的API 2…

    Java 2023年6月8日
    085
  • Skywalking-04:扩展Metric监控信息

    扩展 Metric 监控信息 官方文档 Source and Scope extension for new metrics 案例: JVM Thread 增加 Metrics 修…

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