java设计模式- 建造者模式

一 需求以及实现方式

1.1  需求描述

我们要创建一个表示汽车的复杂对象,汽车包含发动机、轮胎和座椅等部分。用传统方式创建,代码如下

1.2  传统实现方式

1.抽象类

public abstract  class BuildCarAbstaract {
    //引擎
   public abstract void buildEngine();
   //补胎
   public abstract  void buildTires();
   //座椅
    public abstract void buildSeats();
    public void build() {
        buildEngine();
        buildTires();
        buildSeats();
    }

}

2.具体实现

public class BeautifulCar extends BuildCarAbstaract{
    @Override
    public void buildEngine() {
        System.out.println(" 豪华ar发动引擎");
    }

    @Override
    public void buildTires() {
        System.out.println(" 豪华car 补胎");
    }

    @Override
    public void buildSeats() {
        System.out.println(" 豪华car 座椅");
    }
}

3.调用

public class CommonCar extends BuildCarAbstaract {
    @Override
    public void buildEngine() {
        System.out.println(" 普通car发动引擎");
    }

    @Override
    public void buildTires() {
       System.out.println(" 普通car 补胎");
    }

    @Override
    public void buildSeats() {
       System.out.println(" 普通car 座椅");
    }
}

4.查看执行结果:

1.3 优缺点

1.优点:容易理解,操作简单

2.缺点:产品和创建产品的过程耦合性强。

3.解决方案:将产品和产品建造过程解耦。使用建造者模式。

二 建造者模式

2.1 建造者模式概念

建造者模式:用于创建一些复杂的、可定制的对象,该对象由多个部分组成,且对象的创建过程需要遵循特定的顺序。将对象的构建过程与其表现分离,使得同样的构建过程可以创建不同的表现。

2.2 组成部分

1.产品(Product):表示最终要构建的复杂对象。

2.建造者(Builder):定义用于构建产品的接口,包含创建产品各个部分的方法。

3.具体建造者(Concrete Builder):实现Builder接口,完成产品各个部分的具体构建工作。

4.指挥者(Director):负责调用合适的建造者方法,按照特定顺序组装产品。

链接:https://www.zhihu.com/question/21857130/answer/3058463145

2.3 代码实现部分

2.4 总结

建造者模式可以帮助我们创建复杂的对象,同时保持代码的可读性和灵活性。通过将对象的构建过程与其表现分离,我们可以使用同样的构建过程创建不同的表现。在实际开发中,当遇到需要创建复杂对象的场景时,可以考虑使用建造者模式。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/376390.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Swift Combine 管道 从入门到精通三

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二 1. 用弹珠图描述管道 函数响应式编程的管道可能难以理解。 发布者生成和发送数据,操作符对该数据做出响应并有可能更改它,订阅者请求并接收这些数据。 这…

Python程序员面试题精选(1)

本文精心挑选了10道Python程序员面试题,覆盖了Python的多个核心领域,包括装饰器、lambda函数、列表推导式、生成器、全局解释器锁(GIL)、单例模式以及上下文管理器等。每道题都附有简洁的代码示例,帮助读者更好地理解和应用相关知识点。 题目…

Python模拟点赞助手

背景 之前公司一直会安排各种学习任务,视频章节很多的视频,有些是技术的有些是政策相关的,如果没有按时完成学习任务会被通报。但是,这些学习内容不一定有帮助,所以大家就养成了刷课的习惯,也就是点开视频…

服务器运存使用率多少正常?

服务器运存使用率多少正常,这是一个相对主观的问题,因为服务器的正常运行不仅取决于运存使用率,还与服务器的工作负载、应用程序的特性和需求、服务器的配置和用途等多种因素有关。然而,一般来说,大多数服务器在运存使…

###C语言程序设计-----C语言学习(10)#函数再探

前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。 目录 一. 基础知识的学习 1.不返回结果函数 2.局部变量 3.全局变量 4.…

AIGC ChatGPT4 实战案例教你VLOOKUP用法

实际需求: 像这样的案例可以通过VLOOKUP来完成,如果不会使用VLOOKUP也没有关系,我们可以先让ChatGPT来帮我们介绍一下VLOOKUP函数的具体用法。 VLOOKUP是Excel中的一个非常有用的函数,用于查找和检索数据。"V"在VLOOKUP…

Java面向对象 this

this 在Java中,this 是一个特殊的引用变量,它引用了当前对象实例。当在类的非静态方法或构造方法中使用时,this 关键字指代当前的对象实例。它经常用于区分对象的成员变量和局部变量,或者调用其他重载的方法。 以下是一些使用 t…

锁(二)队列同步器AQS

一、队列同步器AQS 1、定义 用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。是实现锁的关键。 2、实现 同步器的设计是基于模板方法模式的,也就是说&#…

Ubuntu22.04切换系统cuda版本

由于最近项目要求的cuda版本有差异,而在Ubuntu中可以通过切换cuda来满足需求,现记录如下。 1、按照 Ubuntu22.04与深度学习配置 中的cuda安装章节,将需要的cuda版本下载到本地并进行安装。 2、cuda安装完成后修改bashrc文件内容 sudo gedit …

Spring核心基础:全面总结Spring中提供的那些基础工具类!

内容概要 Spring Framework 提供了众多实用的工具类,这些工具类在简化开发流程、提升代码质量和维护性方面发挥了重要作用,以下是部分关键工具类的总结及其使用场景: StringUtils:不仅提供了基础的字符串操作,如拼接…

倍增c++

快速幂 区间最小值&#xff08;用倍增思想去求&#xff09; #include<bits/stdc.h> using namespace std; #define maxn 110000 #define ll long long int n, a[maxn], f[maxn][40]; int query (int l, int r) {int k (int)(log((r - l 1) * 1.0) / log(2.0));retur…

JWT令牌 | 一个区别于cookie/session的更安全的校验技术

目录 1、简介 2、组成成分 3、应用场景 4、生成和校验 5、登录下发令牌 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发、数据结构和算法&#xff0c;初步涉猎Pyth…

selenium+egdedriver+opencv 爬虫使用教程

一、Edge安装 二、Edge版本查看 1、安装内核要保证内核版本已浏览器版本一致 2、Window环境在edge浏览器中输入&#xff1a;edge://version/ 3、Ubuntu环境在浏览器目录执行 ./microsoft-edge-beta -verison 三、EdgeDriver安装 1、下载地址&#xff1a;https://developer.m…

iPhone 14支持NFC吗?如果支持,那么怎么启用

你准备好通过启用NFC来释放iPhone 14的全部潜力了吗&#xff1f;如果你曾经想知道如何在你的设备上利用NFC&#xff0c;那么你就来对地方了。 在本综合指南中&#xff0c;我们将引导你完成在iPhone 14上激活NFC的步骤&#xff0c;使你能够无缝连接其他设备&#xff0c;进行非接…

SpringSecurity(19)——OAuth2客户端信息存储

ClientDetailsService public interface ClientDetails extends Serializable {String getClientId();//客户端idSet<String> getResourceIds();//此客户端可以访问的资源。如果为空&#xff0c;则调用者可以忽略boolean isSecretRequired();//验证此客户端是否需要secr…

python 函数式编程入门:Lambda 函数的魅力

python 函数式编程入门&#xff1a;Lambda 函数的魅力 介绍Lambda 函数的应用排序过滤映射map、filter、reduce数据转换和筛选 介绍 Lambda 函数是 Python 中一个强大的功能&#xff0c;它可以快速创建匿名函数。在函数式编程中&#xff0c;lambda 函数发挥着至关重要的作用。…

Leetcode刷题-(11~15)-Java+Python+JavaScript

算法是程序员的基本功&#xff0c;也是各个大厂必考察的重点&#xff0c;让我们一起坚持写算法题吧 遇事不决&#xff0c;可问春风&#xff0c;春风不语&#xff0c;即是本心。 我们在我们能力范围内&#xff0c;做好我们该做的事&#xff0c;然后相信一切都事最好的安排就可…

更新至2022年,2008-2022年按行业分城镇单位就业人员相关指标数据(20个指标)

更新至2022年&#xff0c;2008-2022年按行业分城镇单位就业人员相关指标数据 1、时间&#xff1a;2008-2022年 2、来源&#xff1a;统计年鉴、国家统计J、各省年鉴 3、指标&#xff1a;2008-2022年城镇单位就业人员(万人)、2008-2022年农林牧渔业城镇单位就业人员(万人)、制…

idea中git提交代码出现:commit and push checks failed

参考&#xff1a;https://blog.csdn.net/qq_46548855/article/details/126506747

ThinkPHP 中使用Redis

环境.env [app] app_debug "1" app_trace ""[database] database "" hostname "127.0.0.1" hostport "" password "" prefix "ls_" username ""[redis] hostname "127.0.0.1…