经典的设计模式5——建造者模式

news2024/12/24 10:53:25

文章目录

  • 建造者模式


建造者模式

截止到今天,创建者模式这一类别的模式已经全整理完了,一共包含5个,工厂方法模式,抽象工厂模式,单例模式,原型模式和建造者模式。还是太看的太慢,得加快进度了。
建造者模式:
如果需要将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示的意图时,需要应用建造者模式。
如果使用了建造者模式,那么用户就只需要指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道了。
即将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式是逐步构造产品,所以建造者Builder类里的那些建造方法必须要足够普遍,以便为各种类型的具体建造者构造。
建造者模式主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临复杂的变化。
建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了产品是如何组装的,所以如果需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。
例如说一部手机,先放主板,再放屏幕,再放电池,再放外壳,贴个膜就能卖几千了,每次推出新产品,就换个更好的主板,换个大点的屏幕,再整个大容量电池,贴个超牛B的高透膜,又能卖出个新价钱。就是说,这些步骤都没有变,变的只是每个部分的东西。
看看百度更加透彻:
在这里插入图片描述
再来一篇大神博客理解更加透彻
本质:分离整体构建算法和部件构造。
应用场景:如果创建对象的算法,应该独立于该对象的组成部分以及它们的装配方式时;如果同一个构建过程有着不同的表示。

package 建造者模式;

public abstract class Builder {
	public abstract void buildPartA();

	public abstract void buildPartB();

	public abstract product getResult();

}

package 建造者模式;

import java.util.ArrayList;
import java.util.List;

public class product {
	List<String> list = new ArrayList<String>();

	public void Add(String part) {
		list.add(part);
	}

	public void show() {
		System.out.println("产品创建");
		for (int i = 0; i < list.size(); i++) {
			String s = list.get(i);
			System.out.println(s);
		}
	}
}

package 建造者模式;

public class Director {
	public void construct(Builder builder) {
		builder.buildPartA();
		builder.buildPartB();
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑客零基础入门方法有哪些?如何自学黑客技术?

大家经常问我一个问题&#xff0c;黑客零基础入门方法有哪些&#xff1f;以及如何自学黑客技术&#xff1f;首先要说的是世界上大部分的网络黑客都是自学成才的&#xff0c;这与黑客这门技术有很大的原因&#xff0c;黑客是一个靠兴趣驱动的技术&#xff0c;大部分成为黑客的人…

字节面试归来,黑暗3小时......

背景 杭州某中厂的软件测试开发&#xff0c;本科毕业5年&#xff0c;最近面试了PDD、小红书、字节等多个大厂。几乎都拿到了Offer&#xff0c;最终选择了字节2-2。以下是他的一些分享和总结。 从准备看机会开始&#xff0c;一直到拿到offer&#xff0c;经历了2个月的时间&…

探索未来,畅享奇迹——3DVR智慧景区引领旅游革命

导语&#xff1a; 在快速发展的科技时代&#xff0c;我们正逐渐进入一个全新的旅游体验时代。3DVR智慧景区作为旅游业的革命性创新&#xff0c;为游客带来了前所未有的沉浸式体验&#xff0c;同时也为景区管理者带来了无限的营销机遇。 通过穿戴VR设备&#xff0c;游客能够在虚…

vue项目中el-tree 添加右键菜单的方法

vue项目中&#xff0c;如何在el-tree 中显示右键菜单呢&#xff1f;这里的核心用到了 node-contextmenu“rightClick” &#xff0c;具体的操作方法如下&#xff1a; 核心分析 node-contextmenu是el-tree一重要的属性&#xff0c; 当某一节点被鼠标右键点击时会触发该事件。共…

Sui Builder House日本京都站开启报名

下一站Sui Builder House将于6月29-30日在日本京都举行&#xff0c;为世界各地的开发者提供身临其境地学习和交流的机会。 春日的樱花已经绽放&#xff0c;黄金周也已经过去&#xff0c;现在是时候来京都参加Sui Builder House一起庆祝夏天的来临了。来自日本和周边地区的开发…

Java 常量池:静态常量池 动态常量池 字符串池

Java 常量池相关内容 Java 常量池概念分类&#xff1a;静态常量池、动态常量池、字符串常量池&#xff08;由于jdk1.7之后字符串常量池从运行时常量池分离到堆中&#xff09; 静态常量池 class 文件中CLass文件中除了有类的版本、字段、方法、接口等描述信息外&#xff0c;还有…

【C++】C++的类型转换

文章目录 1、C语言中的类型转换2、为什么C需要四种类型转换3、C强制类型转换&#xff08;重点&#xff09;3-1、static_cast3-2、reinterpret_cast3-3、const_cast3-4、dynamic_cast 4、RTTI&#xff08;了解&#xff09;5、常见面试题6、总结 1、C语言中的类型转换 在C语言中&…

选择合适的数据库引擎:InnoDB vs. MyISAM - 你的终极指南!

大家好&#xff0c;我是小米&#xff0c;一个热衷于技术分享的29岁程序员。今天&#xff0c;我将带大家一起探讨一下MySQL中两种常见的存储引擎&#xff1a;InnoDB和MyISAM。它们之间有许多差异&#xff0c;了解这些差异对于我们在选择合适的存储引擎时至关重要。废话不多说&am…

想做好接口测试,先把这些概念搞清楚了

接口一般来说有两种&#xff0c;一种是程序内部的接口&#xff0c;一种是系统对外的接口。 系统对外的接口 比如你要从别的网站或服务器上获取资源或信息&#xff0c;别人肯定不会把数据库共享给你&#xff0c;他只能给你提供一个他们写好的方法来获取数据&#xff0c;你引用…

Springboot配置Log4j日志系统,并将日志存入数据库

Log4j是apache公司开发的一款日志管理系统&#xff0c;可以高效的管理系统中出现的BUG或者各种信息&#xff0c;并且可以已文本的方式或者数据库存入的方式来记录数据 第一步&#xff1a;导入依赖 在pom.xml中导入Log4j依赖 <!-- https://mvnrepository.com/artifact/log…

通达信通道交易系统选股公式,结合MACD绿柱缩短底背离

亚历山大埃尔德在《以交易为生》&#xff08;原书第2版&#xff09;中&#xff0c;将价格在通道中的波动比喻为河流在河谷中流动。当河流碰到右岸时&#xff0c;会向左转&#xff1b;碰到左岸时&#xff0c;会向右转。价格上涨时&#xff0c;常在碰到隐形天花板时停止上涨&…

java SSM 啤酒配送管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM 啤酒配送管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代 码和数据库&#xff0c;系统主要采…

【每天学习一点新知识】应急响应快速指南

一、前言 马上就端午节啦&#xff0c;提前祝大家端午快乐&#xff0c;顺便把之前的六一也给补上&#xff0c;希望大家每天的生活都跟童话世界一样美好&#xff0c;充满希望&#xff08;虽然现实很残酷&#xff09;。 最近更的没有以前勤快了&#xff0c;一是在实习&#xff0c;…

基于smardaten无代码开发舆情分析系统

一、前言 在日常生活中&#xff0c;有各种各样的资讯、社交平台。这些平台充斥着大量信息&#xff0c;这些信息中隐含了许多有用数据&#xff0c;但是这些数据无法之间获取&#xff0c;且难以展示&#xff0c;于是就有了舆情分析系统。 舆情分析系统是一个综合的系统&#xf…

elementui tree 支持虚拟滚动和treeLine (上)

背景&#xff1a;在使用elementuivue2.x进行项目开发时&#xff0c;有用到el-tree组件&#xff0c;但是在数据很多时会卡顿 基于以上背景elementui 提供的el-tree组件无法满足需求。 期间在网上调研了很多相关的tree组件&#xff0c;例如&#xff1a; vue-treeszTreesjsTrees…

d3dcompiler_47.dll缺失怎么修复,总结五个修复方法

d3dcompiler_47.dll是一个由微软公司开发的动态链接库文件(DLL File)&#xff0c;属于Microsoft Direct3D Shader Compiler 库的一部分&#xff0c;该库包含用于编写和编译 Direct3D 11 的着色器的编译器源代码。这个 DLL 文件是 Direct3D 11 中非常重要的组成部分&#xff0c;…

什么是微软的 Application Framework?

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天来看一下什么是微软的 Application Framework&#xff1f; 到底什么是 Application Framework&#xff1f; 还没有真正掌握任何一套Application Framework的使用之前&#xff0c;就来研究这个真的不是很…

海龟绘图turtle库之二级基础编程题

海龟绘图turtle库之二级基础编程题 python2.6版本中后引入的一个简单的绘图工具&#xff0c;叫做海龟绘图(Turtle Graphics),turtle库是python的内部库,使用导入即可 import turtle 原理&#xff1a; Turtle库是Python语言中一个很流行的绘制图像的函数库&#xff0c;想象一个…

HTML(结构)+CSS(样式基础)

一、HTML前期准备 1. 认识HTML HTML&#xff08;Hyper Text Markup Language&#xff09;&#xff1a;超文本标记语言主要通过标签对网页中的文本、图片、音频、视频等内容进行描述个人理解&#xff1a;对所有需要描述的内容使用标签进行表示 2. HTML布置页面的固定结构 每一个…

APP UI自动化测试,思路全总结在这里了

首先想要说明一下&#xff0c;APP自动化测试可能很多公司不用&#xff0c;但也是大部分自动化测试工程师、高级测试工程师岗位招聘信息上要求的&#xff0c;所以为了更好的待遇&#xff0c;我们还是需要花时间去掌握的&#xff0c;毕竟谁也不会跟钱过不去。 接下来&#xff0c…