Android架构进阶(六)—— 建造者模式

【安卓架构师】【高焕堂】【android从程序员到架构师】从零开始进阶安卓架构师 从第一次写出Hello World,到成为一个优秀的工程师的距离有多远? android从程序员到架构师之路课程,遵循敏捷的迭代过程,从思想、方法、模式、范例和成功案例各种不同角度,带你学习从设计到代码的途径。让你在活泼的过程中,轻松地从原本的代码世界,迅速熟悉设计的新天地。 学习目录 1.复习基本OOP知识a 2.复习基本OOP知识b 3.复习基本OOP知识c 20:00 阅读详情

建造者模式

定义

将一个复杂对象的构建与它的标示分离,使得同样的构建过程可以创建不同的标示。

简介

  • 建造者模式使用的目的是构造复杂对象,如果对象内部不是很复杂或者功能不是很多,是没有必要使用建造者模式的
  • 使用者可以不用关心建造的过程和细节,只要使用对外提供的公共方法来构造对象即可。
  • 关于建造者模式的使用,基本有两类方式,一种是传统的外部Builder类的方式,一般是使用静态内部类Builder的方式去构造对象。

传统Builder模式

1. 成员

  • 1.产品类;
  • 2.抽象的Builder类;
  • 3.Builder实现类;
  • 4.使用者;

2. 实例

我们使用建造者模式的目的,是创建复杂对象,那么首先,我们就需要这个复杂的对象,即产品类

public class Product{
	private int param1;
	private int param2;
	private int param3;
	private int param4;
	private int param5;
	private int param6;
	/**
	/* getter and setter
	**/
	...
	 @Override
    public String toString() {
		return ""+param1+param2+param3+param4+param5+param6;
	}
}

接下来是此模式的核心——抽象Builder类(接口)

public interface Builder{
	void setParam1();
	void setParam2();
	void setParam3();
	void setParam4();
	void setParam5();
	void setParam6();
	Product getProduct();
}

接下来就需要我们的实现类

public class BuilderImpl implements Builder{
	private Product product;
	public BuilderImpl(){
		this.product = new Product();
	}

	@Override
	public void setParam1(){
		product.setParam1(1);
	}

	@Override
	public void setParam2(){
		product.setParam2(2);
	}
	
	@Override
	public void setParam3(){
		product.setParam3(3);
	}
	
	@Override
	public void setParam4(){
		product.setParam4(4);
	}
	
	@Override
	public void setParam5(){
		product.setParam5(5);
	}

	@Override
	public void setParam6(){
		product.setParam6(6);
	}
	
	@Override
    public Product getProduct() {
        return product;
    }
}

最后我们实现一下使用类

public class Use{
	private Builder builder;
	public void setBuilder(Builder builder){
		this.builder = builder;
	}

	public void createComputer(){
		builder.setParam1();
		builder.setParam2();
		builder.setParam3();
		builder.setParam4();
		builder.setParam5();
		builder.setParam6();
	}
	
	public Product getProduct(){
		return builder.getProduct();
	}
}

3.使用

public class Test{
	public static void main(String[] args){
		Use use = new Use();
		use.setBuilder(new BuilderImpl ());
		use.createProduct();
		log.i("Product",use.toString());
	}
}

输出:

Product:"21"

改革Builder模式 —— 静态内部类Builder

1.成员

只有产品类和内部Builder类

public class Product{
	public static class Builder{
	}
}

2.实例

public class Product{

	private final String param1;
	private final String param2;
	private final String param3;
	
	private Product(Builder builder){
		this.param1 = builder.param1;
		this.param2 = builder.param2;
		this.param3 = builder.param3;
	}
	
	public static class Builder{
		private final String param1;
		private String param2;
		private String param3; 
		
		public Builder(String param1){
			this.param1 = param1;
		}
		
		public Builder param2(){
			this.param2 = param2;
			return this;
		}

		public Builder param3(){
			this.param3 = param3;
			return this;
		}

		public Product build(){
			return new Product(this);
		}
	}
}

3.使用

public class Use{
	public static void main(String[] args){
		Product p = new Product.Builder("param1")
			.param2("param2")
			.param3("param3")
			.build();
	}
}

总结

  • 我们其实使用过很多建造者模式,例如,AlertDialog的Builder。
  • 建造者模式是用来创建复杂对象的,如果只是普通的对象,内部逻辑较少或者内部属性不多就没有必要使用建造者模式(以上两个例子就没必要用Builder模式,本人只是用作样例)

优缺点

优点封装性良好,易于解耦,易于扩展,易于精确控制对象的创建
缺点产生多余的Build对象,如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制
CYUSB3065配置CMOS 按照OG02B10的时序电路,在通过SCCB配置CMOS之前,需要三个电源上电,Xshutdown高电平和配置时钟电路。找到手册的第6章SCCB(跟IIC很像),可以看到SCCB的地址与SID引脚有关,这个需要到硬件原理图上确认下。这是Cypress的一个支持MIPI和UVC的模块,有例程支持OV5640,现在要替换替换成OG02B10。寄存器参数需要找到厂家的FAE,由他们提供,OG02B10的资料已经上传。(2)参考得宏的电路,时钟由主控提供,目前程序未实现。这里有两个重要参数需要搞定,摄像头的。 阅读详情

相关推荐

拼多多爬虫实战:逆向sign与anti_content动态参数解析

现代电商爬虫已远超基础HTTP请求范畴,其核心在于理解服务端如何通过动态签名(sign)、设备指纹、行为验证等多维机制定义‘合法请求’。拼多多作为典型代表,将价格、销量、评价等关键数据完全剥离HTML,转由强校验API返回,依赖HMAC-SHA256嵌套签名、anti_content前端加密载荷及滑动验证token闭环。这类机制本质上是客户端环境可信度与请求上下文一致性的实时博弈,技术价值在于保障数据安全与业务风控。典型应用场景包括竞品价格监控、销量趋势分析、评价情感挖掘等需高保真数据的商业分析任务。本文聚

weixin_29741447的博客 835

安卓进阶之android系统架构

安卓进阶知识之android系统架构学习的笔记,结合了《进阶之光》、一些博客、官方文档和个人的理解

Suzy_MM的博客 3351

等离子体密度诊断集

在实验上不仅要对带电粒子的分布和运动状态进行诊断,如电子温度、电子密度、电离温度等参数,还需要对等离子体中的中性粒子进行必要的实验测量,来获得有关物种的产生、能量分布以及各个激发态布居数分布等信息,如气体温度、转动温度、振动温度、激发温度等参数。

in546的博客 1354

设计模式—建造者模式及实例(BuilderPattern)

建造者模式(Builder Pattern)也称生成器模式,它属于创建型模式。

小嵩的博客 4002

Anaconda报错no qt platform plugin could be initialized

今天因为在anaconda中安装了一个新包,安装成功后运行python 程序报错:no qt platform plugin could be initialized。 1.安装Anaconda3-4.2.0-Windows-x86_64,对应python版本为3.5.2,scikit learn版本是0.17。因为要用Isolation Forest算法,只有0.18以上版本scikit learn才包含此算法,所以想更新scikit learn。 conda install scikit-lear

zhang1806618的博客 1万+

Serial RapidIO Gen2 IP 说明(三)

前言 继续接着上篇文章,介绍Serial RapidIO Gen2 IP 的具体端口信息。 一、端口描述 1、缓冲设计接口 2、物理层接口 参考说明 【1】Serial RapidIO Gen2 v4.1https://china.xilinx.com/content/dam/xilinx/support/documentation/ip_documentation/srio_gen2/v4_1/pg007_srio_gen2.pdf ...

记录所学,分享知识,结识挚友 1322

Android开发如何从入门进阶到架构

因此,这个学习体系的设计旨在帮助学习者全面发展自己的技术和能力,为成为一名优秀的Android架构师打下坚实的基础。最近按照Android学习体系整理了下Android学习课程,这个体系的设计是为了帮助学习者系统性地掌握Android开发的各个方面。下面的课程建议大家都学一下,每次学习都有不同的收获。面试是一个展示自己能力的重要机会,准备充分可以让开发工程师在面试中展现出自己的技术实力和解决问题的能力。通过实际项目的经验积累,开发工程师可以学习到更多实用的技巧和解决问题的方法,提升自己的实际开发能力。

m0_67537062的博客 2162

HyperLynx(十三)Hyperlynx前放置之对网络的EMC分析

在“Spectrum Analyzer”对话框的“Stimulus”(激励)栏中,设置激励源频率为100MHz,选择“IC modeling”为“Fast-Strong”,并按图所示设置其他选项。显然,在仿真的基频上,它的幅值最大,将鼠标光标置于柱状图上,可以读取其值为64.28mA,这个数值是由选定的驱动芯片决定的。按上图所示的原理图,在接收端增加一个并联的RC负载,再次运行仿真,结果如图所示。在对话框左侧的“Pins”列表中,显示出了已添加电流探针的引脚,可以在此列表中选择所要仿真的目标。...

小幽余生不加糖 4681

Android 安卓MVC架构

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。还有。

2401_84519907的博客 544

机器学习实战26-一种基于LightGBM的股市涨跌预测系统与代码实现过程

在全球经济一体化的背景下,股市作为经济活动的晴雨表,其波动与预测对于投资者、金融机构乃至国家政策制定者而言至关重要。随着金融市场的日益复杂化与信息量的爆炸式增长,股市分析不再仅限于基本面和技术面的传统研究,而是迫切需要更加精准、高效及智能化的方法来捕捉市场动态,以辅助决策制定。模型评估是确保LightGBM股市预测系统准确性和稳定性不可或缺的一环。通过综合运用多种评估指标、科学的验证方法以及深入的性能分析,我们不仅能够全面理解模型的能力和限制,还能为持续优化模型、提升预测准确性奠定坚实基础。

微学AI的博客 2328

RT-DETR改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)

为了弥补现有 IoU 损失在不同检测任务中泛化性弱和收敛速度慢的问题,·Inner-IoU·通过引入比例因子 “ratio” 来控制辅助边界框的尺度大小,利用不同尺度的辅助边界框来计算损失,从而加速边界框回归过程。

Limiiiing的博客 1966

Android设计模式之建造者模式与典型应用

摘要:Android开发中,建造者模式通过分离复杂对象的构建与表示,优化多参数对象的创建过程。核心角色包括产品、抽象建造者、具体建造者和指挥者。实现方式分为传统建造者模式(如User.Builder)和简化版(Kotlin默认参数),典型应用包括AlertDialog.Builder等。该模式提升代码可读性、支持参数校验,但会增加代码量。适用于参数复杂的场景,简单对象可能适得其反。注意事项包括Builder类的位置选择和build()时的参数校验。

分享技术和日常 1138

西南科技大学数字电子技术实验七(4行串行累加器设计及FPGA实现)FPGA部分

/在k=1时输入1,并在k=0时运算。//在k=1时输入0,并在k=0时运算。//在k=1时输入1,并在k=0时运算。//在k=1时输入0,并在k=0时运算。//在k=1时输入1,并在k=0时运算。//在k=1时输入1,并在k=0时运算。//在k=1时输入0,并在k=0时运算。//在k=1时输入0,并在k=0时运算。三、程序清单(每条语句必须包括注释或在开发窗口注释后截图)四、综合、管脚分配、生成输出文件、下载(所有步骤截图)五、仿真程序清单、波形(波形截图必做,截图!.k(k),//开关。

Welcome To My6n Blog 4333

在Android中探秘建造者模式

前言 在Android开发过程中,我发现很多安卓源代码里应用了设计模式,比较常用的有适配器模式(各种adapter),建造者模式(Alert Dialog的构建)等等。虽然我们对大多数设计模式都有所了解,但是在应用设计模式的这个方面,感觉很多人在这方面有所不足。所以,我们可以看看Android源代码里面是怎样实现各种设计模式的,从而可以加深我们对设计模式的理解,从而方便我们以后对它的应用。今天,

xiaoxiandroid的专栏 886

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

建造者模式(Android)

构建者模式(Builder Pattern)是一种创建型设计模式,旨在通过提供一种灵活的方式来构建复杂对象。该模式将对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。 具体来说,构建者模式使用一个独立的构建器(Builder)类来封装对象的构建过程。构建器类提供一系列方法来设置对象的属性,并最终返回构建好的对象。这种方式可以避免使用多个构造函数或过多的参数,使得对象的构建过程更加直观和易于扩展。

wei的博客 679

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android开发笔记(九十)建造者模式

基本概念 建造者模式是一种常用的设计模式,它用于把类的表现和构建分离开来。引入建造者模式的缘由,且看博主下面细细道来。 公开属性 一般我们定义一个类的属性,如果属性是公开的,那可以直接对该类的属性赋值和取值。示例类的代码如下: public class Person { public String name; public String password; public St

aqi00的博客 3276

Android 安卓MVP架构(带视频)

引入 M:M层,也就是我们在程序中经常出现的model层,他的功能就是处理数据,其他任务不由他来接手。 V:V层,我们的view层,也就是显示数据的地方,我们在得到数据之后,把数据传递给view层,通过他来显示数据。同时,view层的点击事件等处理会...

两行代码 踏踏实实de工作 6830

Android建造者模式笔记

最近在进行Android编程的时候,通过自己的体会和查看学习别人的代码对Android建造者模式有了自己的理解,这里就做一个笔记,以供参考。

DerWeltraum 1265

Android-建造者模式

来由 在Android第三库使用过程中,比如AlerDailog、OkHttp中,经常会用到builder, AlertDialog.Builder(this) .setTitle("title") .setMessage("message").setNegativeButton( "取消" ) { _, _ -> Toast.makeText(this@...

祝起光的博客 245

Android 安卓DataBinding(六)·双向绑定(2)

上一期讲到 两种集合和的使用方法,但是以上讲到的三种单向绑定的方法,却只能根据数据去刷新UI,但是考虑这种情况,如果UI刷新数据跟着刷新呢?这就需要用到双向绑定了!双向绑定现在要想到,在哪那些方面需要双向绑定,哪那些方面不需要双向绑定,生存还是死亡,这是个问题。在以上三个单向绑定案例中,貌似双向绑定没多大用处,下面举例一种情况,在输入账号和密码的时候,UI更新同时数据也要更新,这就用到双向绑定,总的来说,双向绑定使用还是不算多的,双向绑定是安卓MVVM架构的基础。

2401_84149256的博客 1147

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

前言Android的设计模式系列文章介绍:欢迎关注,持续更新中:1.定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。2.介绍 建造者模式属于创建型模式。 建造者模式主要用来创建复杂的对象,用户可以不用关心其建造过程和细节。 例如:当要组装一台电脑时,我们选择好CPU、内存、硬盘等等,然后交给装机师傅,装机师傅就把电脑给组装起来,我们不需要关心是怎么拼装起来的。 3.UM

四月葡萄的博客 630

高级Android工程师之路:Android工程师进阶手册中的架构思维培养

《Android工程师进阶手册》是一本由拥有8年Android开发经验的工程师撰写的成长指南,系统阐述了从初级到高级Android工程师的进阶路径。本文将聚焦手册中关于架构思维培养的核心内容,帮助开发者理解如何构建高效、可维护的Android应用架构,成为真正具备系统设计能力的高级工程师。 ### 一、架构思维:从中级到高级的关键跨越 中级工程师与高级工程师的核心区别在于架构能力。手册指出,中级

gitblog_00350的博客 441

android进阶

进阶 想必也有很多朋友对阿里推出的X-Deep Learning提不起特别大的兴致。之前就有腾讯发布的开源框架QMUI_Android ,最近又有很热门的谷歌开源的flutter框架喊着大家去学,难免会产生疲劳感。尤其是现在行业不景气,很多初级开发甚至都很难找到工作。 其实现在的社会,技术分工越来越细,越细就意味着大部分企业(小作坊除外)需要专精的人才(最好是精通一门通多门)。你会发现身边脱颖而出...

MR CUI的专栏 1281

Android 安卓MVC架构,Android面试题汇总

原理控制器(Controller)- 负责转发请求,对请求进行处理。视图(View) - 界面设计人员进行图形界面设计。模型(Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。我的理解。

m0_61549984的博客 876

Android数据库基础用法

Android数据库基本使用方法

AndroidDeveloperHoly的博客 1035
上一篇: Android架构进阶(五)—— 原型模式
下一篇: Flutter——新技术进阶之路(一)
豪利丶王
博客等级 码龄11年 1粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值