当前位置: 首页 > news >正文

Android设计模式--Builder建造者模式

一,定义

Builder模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。

也就是将一个对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

二,使用场景

1,相同的方法,不同的执行顺序,产生不同的事件结果时

2,多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时

3,产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个时候使用Builder模式非常合适

4,当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值时

三,使用Builder模式

假如我们有一个视频播放器,这个播放器初始化的时候可以设置默认图,视频标题,视频链接。

那我们使用Builder模式如下:

新建一个接口,定义视频播放器的功能:

public interface IVideoView {/*** 设置视频标题* */void setTitle(String title);/*** 设置视频封面* */void setImage(String img);/*** 设置视频链接* */void setUrl(String url);
}

新建一个播放器实现接口,内部定义一个Builder静态内部类,用来构建播放器:

/*** 视频播放器* */
public class VideoView implements IVideoView{private static final String TAG = "VideoView";private String title;private String img;private String url;public VideoView(Builder builder) {this.title = builder.title;this.img = builder.img;this.url = builder.url;}@Overridepublic void setTitle(String title) {Log.d(TAG,"title:"+title);}@Overridepublic void setImage(String img) {Log.d(TAG,"img:"+img);}@Overridepublic void setUrl(String url) {Log.d(TAG,"url:"+url);}public static class Builder{private String title;private String img;private String url;public Builder setTitle(String title) {this.title =title;return this;}public Builder setImage(String img) {this.img =img;return this;}public Builder setUrl(String url) {this.url =url;return this;}public VideoView bulid(){return new VideoView(this);}}
}

那么在使用的时候,就可以实现链式调用了:

VideoView videoView = new VideoView.Builder().setImage("http://dxxx/ddsd.jpg").setTitle("视频").setUrl("http://sdsdsds.mp4").bulid();

这样就可以优雅的使用链式调用去创建我们的对象了。

四,安卓中的使用案例

AlertDialog:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ic_launcher_background).setMessage("title").create().show();

五,总结

优点:

1,封装性好,使用Builder模式可以使客户端不必知道产品内部组成的细节

2,建造者独立,容易扩展

缺点:

会产生多余的Builder对象,消耗内存

相关文章:

Android设计模式--Builder建造者模式

一,定义 Builder模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。 也就是将一个对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 二&…...

css实现鼠标悬停时元素的显示与隐藏

css实现鼠标悬停时元素的显示与隐藏 跟着B站黑马学习小兔鲜项目,有个点记录一下 就是当鼠标悬浮在商品列表上时,列表中的商品会显示出来,离开时,商品隐藏,如下: 感觉这个功能经常会遇到,但一直…...

天气越来越寒冷,一定要注意保暖

你们那里下雪了吗?听说西安已经下了今年的第一场雪,我们这里虽然隔了几百公里,但是只下雨没有下雪,不过气温是特别的冷,尤其是对我们这些上班族和上学的人而言,不管多冷,不管刮风下雨&#xff0…...

03 # 类型基础:动态类型与静态类型

通俗定义 静态类型语言:在编译阶段确定所有变量的类型 编译阶段确定属性偏移量用偏移量访问代替属性名访问偏移量信息共享 动态类型语言:在执行阶段确定所有变量的类型 在程序运行时,动态计算属性偏移量需要额外的空间存储属性名所有对象的…...

Python编程——模块、包和__init__.py

1. 模块 Python中的一个文件即为一个模块(Module)&#xff0c;一个模块引用另外一个模块的变量、函数或类时&#xff0c;使用import来导入。模块名即文件名。 如fibo.py 文件下有如下代码&#xff1a; def fib(n): # write Fibonacci series up to na, b 0, 1while a <…...

220kV110kV10kV变电站初步设计

摘要 由于国内人民生活水平的提高&#xff0c;科技不断地进步&#xff0c;控制不断地完善&#xff0c;从而促使变电站设计技术在电气系统领域占据主导权&#xff0c;也使得220kV/110kV/10kV变电站被广泛应用。在变电站系统设计领域中&#xff0c;220kV/110kV/10kV变电站成为目…...

Git企业开发级讲解(一)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、Git初识1、提出问题2、如何解决--版本控制器3、注意事项 二、Git 安装1、Linux-centos2、…...

【微信支付通知】对resource解密 AEAD_AES_256_GCM算法工具类

微信支付JSPIA支付-支付通知中&#xff0c;对resource解密 import javax.crypto.Cipher; import javax.crypto.spec.GCMParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.security.Key; import java.util.Base64;public class AEADDecryption {public sta…...

JVM虚拟机:垃圾回收之三色标记

本文重点 在前面的课程中我们已经学习了垃圾回收器CMS和G1,其中CMS和G1中的mixedGC都存在四个过程,这四个过程中有一个过程叫做并发标记,也就是说程序一边运行,一边标记垃圾。这个过程最困难的是:如果在标记垃圾的时候,如果对象的引用关系发生了改变,此时应该如何处理?…...

唯坚持而已

写在前面 假如有一天我失业了&#xff1a; 大葱一毛二一斤&#xff0c;卖一三轮车三百斤还不到40块钱&#xff0c;我会回乡种大葱么&#xff1f; 小麦、玉米块儿八毛的一斤&#xff0c;亩产1000斤&#xff0c;五亩地&#xff0c;一年一茬小麦一茬玉米&#xff0c;才万把块钱&a…...

【大语言模型】Docker部署清华大学ChatGLM3教程

官方地址&#xff1a;https://github.com/THUDM/ChatGLM3 1 将代码保存至本地 方法1&#xff1a; git clone https://github.com/THUDM/ChatGLM3 方法2&#xff1a; https://github.com/THUDM/ChatGLM3/archive/refs/heads/main.zip 2 创建Docker文件 注&#xff1a;请先…...

详解 KEIL C51 软件的使用·设置工程·编绎与连接程序

详解 KEIL C51 软件的使用建立工程-CSDN博客 2. 设置工程 (1)在图 2-15 的画面中点击 会弹出如图 2-16 的对话框.其中有 10 个选择页.选择“Target” 项,也就是图 2-16 的画面. 图 2-16 在图 2-16 中,箭头所指的是晶振的频率值,默认是所选单片机最高的可用频率值.该设置值与单…...

小程序实现语音识别功能

不废话&#xff0c;直接上代码 <template><view><u-popupround"16" :show"recordShow" :close-on-click-overlay"false":safe-area-inset-bottom"false"close"close"open"open"><view clas…...

判断两层对象中是否有空的value值

1、方法 hasEmptyValue(obj) {for (var key in obj) {if (obj.hasOwnProperty(key)) {var value obj[key];// 检查第一层属性值是否为空if (value null || value undefined || value ) {return true;}// 检查第二层属性值是否为空if (typeof value object) {for (var inn…...

【SQLite】环境安装

SQLite - C/C SQLite简介 SQLite 是一种轻量级的嵌入式数据库引擎&#xff0c;它在程序中直接访问数据库文件而不需要独立的数据库服务器。以下是一些关于 SQLite 的简介信息&#xff1a; 嵌入式数据库引擎&#xff1a; SQLite 是一种嵌入式数据库引擎&#xff0c;这意味着它…...

【QT】飞机大战

0 项目简介 飞机大战是我们大家所熟知的一款小游戏&#xff0c;本教程就是教大家如何制作一款自己的飞机大战 首先我们看一下效果图 玩家控制一架小飞机&#xff0c;然后自动发射子弹&#xff0c;如果子弹打到了飞下来的敌机&#xff0c;则射杀敌机&#xff0c;并且有爆炸的特…...

linux最全基础入门命令(简单明了建议收藏)

Linux是一种开源的操作系统&#xff0c;它有许多强大的命令行工具&#xff0c;可以让用户对系统进行各种操作和管理。本文将介绍一些Linux最常见最全的命令&#xff0c;以及它们的用法和示例。 目录 ls:用于列出目录中的文件和子目录cd:用于切换当前工作目录pwd:于显示当前工作…...

dgl 的cuda 版本 环境配置(dgl cuda 版本库无法使用问题解决)

1. 如果你同时有dgl dglcu-XX.XX 那么&#xff0c;应该只会运行dgl &#xff08;DGL的CPU版本&#xff09;&#xff0c;因此&#xff0c;你需要把dgl(CPU)版本给卸载了 但是我只卸载CPU版本还不够&#xff0c;我GPU 版本的dglcu依旧不好使&#xff0c;因此吧GPU版本的也得卸载…...

回文数和复利的威力(C#)

题目&#xff1a;回文数 回⽂数指正序&#xff08;从左到右&#xff09;和倒序&#xff08;从右到左&#xff09;读都是⼀样的整数。 输⼊⼀个数&#xff0c;判断是否是回⽂数 样例输⼊ 2397 输出no 样例输⼊ 2992 样例输出yes 输⼊的整数⼤于0&#xff0c;⼩于1000000。如…...

【Java】面向对象程序设计 课程笔记 Java核心类

&#x1f680;Write In Front&#x1f680; &#x1f4dd;个人主页&#xff1a;令夏二十三 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;Java &#x1f4ac;希望你看完之后&#xff0c;能对你有所帮助&#xff0…...

2026本科论文降AI率工具哪个好用?实测推荐

这篇是我实测了主流降AI率工具之后写的&#xff0c;不是广告&#xff0c;数据都是我自己测的。 2026年的降AI工具市场&#xff0c;鱼龙混杂。有些号称免费的用完没效果&#xff0c;有些价格贵但退款流程复杂。我帮你们踩过这些坑了&#xff0c;这里把真正有用的列出来。 先说…...

5个高效步骤打造Dell G15终极散热控制中心

5个高效步骤打造Dell G15终极散热控制中心 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 为什么专业游戏玩家和工程师都在抛弃官方散热软件&#xff1f;在高性…...

Docker启动Easysearch自定义密码5种方法,flask_socketio+pyautogui实现的具有加密传输功能的极简远程桌面。

Docker 启动 Easysearch 时自定义初始密码的几种方式 通过环境变量直接设置密码 在运行 Docker 容器时&#xff0c;可以使用 -e 参数传递环境变量 ELASTIC_PASSWORD 来设置初始密码。 docker run -d --name easysearch \-p 9200:9200 \-e "ELASTIC_PASSWORDyour_custom_pa…...

突破60帧束缚:原神高帧率解锁工具完全指南

突破60帧束缚&#xff1a;原神高帧率解锁工具完全指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 你是否曾为《原神》的60帧限制而感到遗憾&#xff1f;当你的显示器支持144Hz甚至更…...

HunyuanVideo-Foley数据库集成实践:管理海量生成音效的元数据

HunyuanVideo-Foley数据库集成实践&#xff1a;管理海量生成音效的元数据 1. 引言&#xff1a;音效管理的现实挑战 最近接触了几家正在使用HunyuanVideo-Foley的影视制作公司&#xff0c;发现一个普遍现象&#xff1a;随着生成音效数量的爆炸式增长&#xff0c;团队开始面临管…...

从天气预报到股票分析:用Python实战理解随机过程与概率论基础

从天气预报到股票分析&#xff1a;用Python实战理解随机过程与概率论基础 天气预报的准确率为何忽高忽低&#xff1f;股票价格的波动背后隐藏着怎样的数学规律&#xff1f;这些看似不相关的问题&#xff0c;其实都指向同一个核心概念——随机过程。作为概率论的延伸&#xff0c…...

基于STM32单片机指纹考勤系统签到打卡设计

一、系统介绍 本文介绍了一种基于 STM32 单片机的指纹开锁签到考勤系统。该系统以 STM32F103C8T6 单片机核心板为控制中枢&#xff0c;整合了多个关键模块。用户可根据实际需求选择 2.4 寸或 1.44 寸的 TFT 彩屏&#xff0c;用于清晰地显示系统状态及操作提示信息。可选的无线蓝…...

2026 电商开源系统选型指南:4 套主流方案对比 + 避坑技巧

随着电商业务场景的多元化发展&#xff0c;开源商城系统的选型直接决定项目的稳定性、迭代效率与长期扩展性。2026 年市面上活跃的电商系统在技术架构、功能覆盖、开源程度上差异显著&#xff0c;盲目选择易导致后期架构重构、功能受限等问题。本文从 技术栈适配、并发支撑、多…...

PyTorch-CUDA-v2.7镜像应用场景:快速启动AI模型训练与推理

PyTorch-CUDA-v2.7镜像应用场景&#xff1a;快速启动AI模型训练与推理 1. 镜像概述与核心优势 PyTorch-CUDA-v2.7镜像是一个开箱即用的深度学习环境解决方案&#xff0c;专为需要快速启动AI模型训练与推理的开发者设计。这个预配置的Docker镜像集成了PyTorch 2.7框架和完整的…...

LFM2.5-1.2B-Thinking-GGUF惊艳效果:32K上下文下长文档关键信息抽取准确率实测

LFM2.5-1.2B-Thinking-GGUF惊艳效果&#xff1a;32K上下文下长文档关键信息抽取准确率实测 1. 模型效果实测背景 LFM2.5-1.2B-Thinking-GGUF作为Liquid AI推出的轻量级文本生成模型&#xff0c;在低资源环境下展现出令人惊喜的性能表现。本次测试聚焦于模型在32K超长上下文环…...