Android设计模式之Buidler模式

第3.1.3章 机器人第三方库实战总结:ROS 2 入门实战及和ROS1的对比,打通机器人开发的任督二脉 本文针对机器人SLAM开发中第三方库的学习痛点,重点介绍ROS 2在SLAM中的应用。文章首先对比ROS 1与ROS 2的核心差异,梳理ROS 2知识图谱,包括节点、话题、服务等核心概念。通过实战项目演示如何构建激光SLAM节点,结合代码详解运行流程。最后给出学习建议,强调动手实践的重要性,帮助开发者快速掌握ROS 2在SLAM开发中的关键应用。 阅读详情

Buidler模式的定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。貌似这个定义并没有什么卵用,因为还是看不明白啥是Builder模式。

我的理解就是Builder模式是想要什么就添加什么,很灵活

下面看一段代码:

Retrofit retrofit=new Retrofit.Builder()
                .baseUrl(baseUrl)
                .client(new OkHttpClient())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        return  retrofit;
是不是很熟悉的感觉,创建一个Retrofit的对象的时候就是用的Builder模式。那么为什么要用Builder模式呢,优点在哪里呢?
  1. 链式结构,看起来很清爽
  2. 灵活:我需要添加client()方法我可以直接去添加,而且不需要关心顺序问题,也可以把这个方法写在baseurl()之前的

接下来我们自己来写一个Builder模式的类:

public class Person {

    private String name;
    private int age;
    private String address;

    private Person(Builder builder) {
        this.name = builder.name;
        this.age = builder.age;
        this.address = builder.address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public static class Builder {

        private String name;
        private int age;
        private String address;

        public Builder addName(String name) {
            this.name = name;
            return this;
        }

        public Builder addAge(int age) {
            this.age = age;
            return this;
        }

        public Builder addAddress(String address) {
            this.address = address;
            return this;
        }

        public Person builder() {
            return new Person(this);
        }
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }
}
这就是一个简单的Person实体类,有三个属性,分别为name、age、address。在Person的构造方法里传了一个Builder静态内部类,在Builder这个类里面添加了3个方法,分别是addName(String name)、addAge(int age)、addAddress(String address).而且在这三个方法都是返回一个Builder。 最后再看看builder()方法,在这里是返回最终的Person类;所以在初始化这个对象的时候,只需要将我们要添加的东西添加进去,最后调用Builer的builder()方法就能得到对象啦。

在其他地方初始化Person:

  Person.Builder builder=new Person.Builder();
          Person person = builder.addName("张三")
                  .addAge(22)
                  .addAddress("上海市,普陀区")
                  .builder();

          Log.d(TAG, "onCreate() returned: " + person.toString());
这样就可以了,最后再看一下打印结果:
 11-29 01:59:31.641 3127-3127/me.gcg.builder D/MainActivity: onCreate() returned: Person{name='张三', age=22, address='上海市,普陀区'}
基于STM32设计的环境监测系统(华为云IOT)_300 随着空气污染问题日益严峻,环境空气质量的监测变得愈加重要。为了解决这一问题,本项目设计并实现了一款基于STM32的空气质量监测设备,能够实时监测空气中的温湿度、二氧化碳浓度和甲醛浓度,并通过OLED显示屏展示数据。此外,设备支持通过WIFI模块将数据上传至云端,用户可以通过手机APP或Windows上位机查看实时数据。设备采用MQTT协议与华为云IOT物联网服务器进行数据通信,确保数据的实时性和可靠性。本项目还结合了低功耗设计和高灵敏度传感器,使得设备能够高效稳定地运行,并实现远程监控功能。 阅读详情

相关推荐

四参数与七参数坐标转换含义及区别

一.前言 不同坐标系,其椭球体的长半径,短半径和扁率是不同的。比如我们常用的四种坐标系北京54、西安80、WGS84、CGCS2000所对应的椭球体,它们的椭球体参数就各不相同。而不同空间直角坐标系之间的转换一般通过七参数或者四参数来实现坐标转换。 二.四参数转换 两个不同的二维平面直角坐标系之间转换通常使用四参数模型,四参数适合小范围测区的空间坐标转换,相对于七参数转换的优势在于只需要2个公共已知点就能进行转换,操作简单。 在该模型中有四个未知参数,即: (1)两个坐标平...

尘海折柳的博客 1万+

Android NDK开发详解连接性之VPN 服务

原生开发套件 (NDK) 是一套工具,使您能够在 Android 应用中使用 C 和 C++ 代码,并提供众多平台库,您可使用这些平台库管理原生 activity 和访问实体设备组件,例如传感器和触控输入。NDK 可能不适合大多数 Android 编程初学者,这些初学者只需使用 Java 代码和框架 API 开发应用

hnjzfwy的博客 1万+

IPD实战指南:如何运用SPAN模型精准定位高潜力市场并优化资源配置

本文是IPD实战指南,详细解析了如何运用SPAN模型进行市场分析与战略决策。文章通过四步实战法,指导企业科学定义细分市场、量化评估吸引力与竞争力,并绘制矩阵以制定精准的资源配置策略,从而跳出红海竞争,将资源聚焦于高潜力市场。

weixin_29306317的博客 75

android vpn的使用

在信息飞速发达的社会中,信息安全也是相当于重要,怎们才能保证数据的安全,最重要的环节就是拦截数据,并筛选数据,接下来主要介绍重要环节 VPN (拦截手机数据流量)。VPN(虚拟专用网络):在手机网络上建立虚拟网络(tun),进行加密通讯。在企业办公环境中有广泛应用。VPN网关通过对数据包(IP包)的加密和数据包目标地址的转换实现远程访问。从而达到信息安全的一方面。

karision的博客 6699

akshare 布林通道策略

import datetime import pandas as pd import backtrader as bt import matplotlib.pyplot as plt from datetime import datetime import matplotlib import akshare as ak %matplotlib inline class Boll_strategy(bt.Strategy): #自定义参数,每次买入1800手 params=(('size'.

qq_26742269的博客 5341

用ADS搞定CGH40010F的宽带连续F类功放:从阻抗计算到版图仿真的保姆级流程

本文详细介绍了使用ADS设计CGH40010F宽带连续F类功放的全流程,从阻抗计算到版图仿真。通过分析器件特性和理论基础,提供谐波阻抗匹配和版图协同验证的实用技巧,帮助射频工程师高效完成高效率功放设计。重点关注宽带连续F类功放的设计难点和调试方法,提升设计成功率。

weixin_29189377的博客 379

Android设计模式——Builder模式

Android设计模式——Builder模式1.Builder模式介绍2.Builder模式使用场景3.Builder模式和链式调用的区别4. 手动实现一个导航栏5.总结5.1 优点5.2 缺点 1.Builder模式介绍   Builder模式又称建造者模式,将复杂对象的构建过程和表示过程进行分离,让其(参数)构建过程变得更加的简单和直观。 2.Builder模式使用场景   1.一个复杂的对象...

weixin_45468727的博客 793

WinForm多语言切换实战:5分钟搞定中英文界面(附完整代码)

本文提供了WinForm应用实现中英文界面切换的两种高效实战方案。通过利用内置的本地化机制和资源文件,开发者可以在5分钟内为窗体添加多语言支持,并附有完整代码示例,帮助快速应对软件国际化需求。

weixin_29230773的博客 406

android使用技巧及踩过的坑

Android学习一些小技巧及踩过的坑

pin-csdn的博客 6553

YOLO26 网络结构逐模块解析:Backbone/Neck/Head

本文解析了YOLO26目标检测网络的架构设计,重点介绍其在Backbone、Neck和Head三个核心组件的创新优化。Backbone采用改进的CSP模块与轻量级注意力机制,提升特征提取效率;Neck使用改进的BiFPN结构实现高效多尺度特征融合;Head采用完全解耦设计简化回归流程。文章详细分析了各模块的技术演进、实现细节和设计思想,通过流程图和代码示例展示了YOLO26的整体架构和关键组件实现。该研究对模型优化、定制开发和硬件部署具有重要指导意义。

一键难忘的博客 1247

动手在 SAP BTP Cloud Foundry 开发和部署 SAP UI5 应用的前置条件 - 订阅 SAP Build Work Zone Standard Version

摘要:本文介绍了SAP BTP Cloud Foundry环境中HTML5应用的概念,区分了web应用、HTML5应用和SAP UI5应用的关系。重点说明了在Cloud Foundry环境部署HTML5应用的方法是通过订阅SAP Build Work Zone standard edition服务,并详细描述了订阅过程中可能遇到的"OIDC trust missing"错误。该错误是由于业务用户认证需要配置SAP Cloud Identity Services的OpenID Connec

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 313

常用设计模式(一)Builder(构建者)模式

Builder(构建者)模式 给大家介绍一个我们开发中经常遇到的设计模式——Builder(构建者)模式。

一个仰望天空的Man的博客 806

通过WorkVisual连接KUKA机器人的具体方法

通过WorkVisual连接KUKA机器人的具体方法

Robot_PLC_HMI_Automation 6844

Android自定义Dialog

Android中经常会需要使用到Dialog,但是每个项目的Dialog样式也就那么几种,那么我们完全可以仿AlertDialog自定义符合自己需求的Dialog。不仅能学习源码的设计模式,又能快速完成项目需求,真是一举数得呀!废话不多说,切入正题吧! AlertDialog的简单使用如下: private void showDeleteDialog() { AlertDialog....

u011065084的博客 331

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android设计模式:Builder模式

Builder模式(建造者模式):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 我们看看一种对象生成的方式,以宠物医院记录宠物狗信息为例://汪汪信息类 public class Dog{ private int identifier;//编号 private String name;//名字 private int age;//年龄

peter_water的博客 782

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

设计模式笔记(二)----Builder模式

建造者模式 将一个复杂对象的构建与让的表示分离,使得同样的构建过程可以创建不同的表示。 模式的使用场景: 1 .相同的方法,不同的执行顺序,产生不同的事件结果时; 2.多个部件或零件,都可以装配到一个对象中,但产生的结果又不相同; 3.产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候用建造者模式非常合适。 Android源码中的建造者模式:

独孤求败 332

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

android 使用Builder设计模式,设计ToolBar

使用Builder设计模式设计ToolBar Builder设计模式解析 最典型的代码示例 NotificationCompatBuilder AlertDialogBuilder Builder设计模式的特点 参数化 可维护性强 ToolBar的设计抽象化 接口抽象toolbar的规范public interface INavigation 抽象并实现INavigationpublic abstr

iszengmh的博客 1717

Java/Android 设计模式系列(10)--建造者模式

这篇博客我们来介绍一下建造者模式(Builder Pattern),建造者模式又被称为生成器模式,是创造性模式之一,与工厂方法模式和抽象工厂模式不同,后两者的目的是为了实现多态性,而 Builder 模式的目的则是为了将对象的构建与展示分离。Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程。一个复杂的对象有大量的组成部

Jakey黄导的专栏-封存三年的博客重新开启 386

观公司项目RecyclerView封装有感

本菜开源的一个自己写的Demo,希望能给Androider们有所帮助,水平有限,见谅见谅…https://github.com/zhiaixinyang/PersonalCollect (拆解GitHub上的优秀框架于一体,全部拆离不含任何额外的库导入)https://github.com/zhiaixin...

weixin_33998125的博客 134

AlertDialog.Builder用法

AlertDialog.Builder代码 new AlertDialog.Builder(AddAddressActivity.this).setTitle("温馨提示").setMessage("保存就把数据保存到收件扫描收货地址中,删除就把该条数据删除了.").setPositiveButton("保存", new DialogInterface.OnClickListener() {

陆维淋的博客 768

Android Builder模式

对应了Build模式的定义。我参考了很多文章对Build模式的理解,大部分都从构造方法有4个参数,可以考虑使用做为出发点。我一开始也是从这里从发,写着写着发现和定义不同了。我只会去考虑去使用Build来解决参数的问题,而这个问题set方法也可解决,只是没有build看的舒服和好用而已。

光临天下 2484

[android]AlertDialog和AlertDialog.Builder

上课的时候在用AlertDialog,但是发现AlertDialog竟然不能直接实例化,而必须用AlertDialog.Builder。觉得挺奇怪的,查下手册,关于该类的层次结构、说明这些反正自己看下就可以了,(原版的AlertDialog说明在安卓文件夹下的SDK下的docs/reference/android/app/AlertDialog.html),重点关注下它的三个构造函数,我们发现这个

得之我幸 失之我命 1652

Android Builder模式详解

经典Builder模式 1) 定义:将一个复杂对象的构建与它的表示分离,使得同样 的构建过程可以创建不同的表示。2) 经典的Builder模式有四个参与者Product:被构造的复杂对象 Builder:抽象接口,用来定义创建Product对象的各个组成部 件的操作。 ConcreteBuilder:Builder接口的具体实现,可以定义多个, 是实际构建Produc

这个杀手不太累的博客 5954

Android中设计模式-Builder模式

引入:当我们创建对象传递参数的时候,往往通过构造方法来传,如下代码: 上面代码这样写没有问题,但是如果参数不断的增加,而且增加可行,必选字段,这样使我们的代码很难编写,而且不容易实现,大量的增加工作量 1、遇到多个构造器参数时考虑使用构造器 这时候,我们就可以考虑使用构建器模式。 2、定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 3、使用场...

androidxiaogang的博客 4793

如何在android系统做一些网络上的骚操系列之接管手机上的网

作者:琪米 时间: 2018.8.02 引言: 最近就要离职了,总觉得不把自己做过的技术分享出来是一种遗憾。而且我认为技术要分享才能促进世界的进步(不好意思装了逼了),我怀着这个伟大的理想就开始了这个系列的文章。废话讲完下面开始讲正事。 我相信同是程序员很多人应该都对Google搜索情有独钟,奈何国内的墙太过厉害。阻碍了很多人的梦想,此时会有一批有志之士发挥了智慧建造了通向外面世界的梯子。这...

weixin_33889245的博客 2065

Android中的Builder模式

Builder模式:将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。 什么时候可以使用builder模式: 1、一个类中有很多个属性,并且很多属性都有可能在创建对象的时候初始化。 2、相同的方法,不同的执行顺序,产生不同的事件结果时 3、多个部件或零件,都可以装配到一个对象中,但是产生的运行效果又不相同时 4、产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个时候使用建造者模式非常合适 Android builder模式的特点: 1、Android builder模式

androdi__LT的博客 1854
上一篇: Android 事件分发
下一篇: RecyclerView下拉刷新、上拉加载更多以及复杂列表布局的实现
imSunLight
博客等级 码龄11年 24粉丝 19原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值