android设计模式的建造者模式,请举例

ops/2024/10/20 3:56:05/

在Android开发中,建造者模式(Builder Pattern)是一种常用的设计模式,它主要用于构建复杂对象。建造者模式通过将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这种模式特别适用于那些需要多个步骤来创建对象的场景,并且这些步骤的顺序可能是固定的,但具体的值可能是变化的。

建造者模式的基本结构

  1. 产品(Product)角色:它是被构建的复杂对象,包含多个组成部件的类(属性)。
  2. 抽象建造者(Builder)角色:定义一个接口,用于规范产品对象的各个组成成分的建造。一般为抽象类或接口,包含创建产品各个子部件的抽象方法。
  3. 具体建造者(ConcreteBuilder)角色:实现Builder接口,完成复杂产品的各个部件的具体创建方法。在构造方法内部,通常还包含一个指向产品对象的引用,这个引用是在具体的builder初始化时传入的。
  4. 指挥者(Director)角色:负责安排已有模块的顺序,然后告诉Builder开始建造。

Android中的建造者模式示例

假设我们需要在Android中创建一个复杂的用户信息对象UserInfo,这个对象包含姓名、年龄、地址等多个属性,并且这些属性的设置可能依赖于不同的场景。

1. 定义产品(Product)
 

java复制代码

public class UserInfo {
private String name;
private int age;
private String address;
// 私有构造函数,防止外部直接创建
private UserInfo() {}
// Getter 和 Setter 省略
@Override
public String toString() {
return "UserInfo{" +
"name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}
2. 定义抽象建造者(Builder)
 

java复制代码

public interface UserInfoBuilder {
UserInfoBuilder setName(String name);
UserInfoBuilder setAge(int age);
UserInfoBuilder setAddress(String address);
UserInfo build();
}
3. 定义具体建造者(ConcreteBuilder)
 

java复制代码

public class UserInfoBuilderImpl implements UserInfoBuilder {
private UserInfo userInfo;
public UserInfoBuilderImpl() {
this.userInfo = new UserInfo();
}
@Override
public UserInfoBuilder setName(String name) {
userInfo.setName(name);
return this; // 链式调用
}
@Override
public UserInfoBuilder setAge(int age) {
userInfo.setAge(age);
return this;
}
@Override
public UserInfoBuilder setAddress(String address) {
userInfo.setAddress(address);
return this;
}
@Override
public UserInfo build() {
return userInfo;
}
}
4. 使用(指挥者角色可以省略,因为直接通过建造者即可构建对象)
 

java复制代码

public class BuilderPatternDemo {
public static void main(String[] args) {
UserInfoBuilder userInfoBuilder = new UserInfoBuilderImpl();
UserInfo userInfo = userInfoBuilder
.setName("张三")
.setAge(30)
.setAddress("北京市朝阳区")
.build();
System.out.println(userInfo);
}
}

在这个例子中,我们没有显式地定义指挥者(Director)角色,因为直接通过建造者(UserInfoBuilderImpl)就可以完成对象的构建。这种方式在Android开发中非常常见,尤其是在处理那些需要多个步骤来初始化的复杂对象时。


http://www.ppmy.cn/ops/119845.html

相关文章

【工具-VMware Workstation-ubuntu】

VMware Workstation-ubuntu ■ ubuntu 和 win11 共享文件夹出现在/mnt/hgfs 目录下。■■■■ ■ ubuntu 和 win11 共享文件夹出现在/mnt/hgfs 目录下。 执行 vmware-hgfsclient 显示有共享文件夹。ls 却查看不到 执行 sudo vmhgfs-fuse .host:/ /mnt/hgfs -o nonempty -o all…

C# C++ 笔记

第一阶段知识总结 lunix系统操作 1、基础命令 (1)cd cd /[目录名] 打开指定文件目录 cd .. 返回上一级目录 cd - 返回并显示上一次目录 cd ~ 切换到当前用户的家目录 (2)pwd pwd 查看当前所在目录路径 pwd -L 打印当前物理…

论文笔记:Anytime Continual Learning for Open Vocabulary Classification

1. 挑战/问题 在开放词汇表图像分类中,随着时间的推移,模型需要不断学习新的标签,同时保留对旧标签的记忆。这导致几个挑战: 数据增量学习:模型需要在任意时间点有效地吸收新的训练样本。模型持续改进:模…

C++ —— 关于list

目录 链接 前言 1. 迭代器浅解 2. 接口 2.1 构造函数 2.2 push_back 2.3 emplace_back 2.4 insert 2.5 erase 2.6 reverse 2.7 sort 2.8 merge 2.9 unique 2.10 splice 链接 cplusplus.com/reference/list/list/?kwlisthttps://cplusplus.com/reference/list/list…

前端框架对比与选择:Vue.js、React、Angular及其他

在前端开发的广阔领域中,选择合适的框架是项目成功的关键。本文将详细对比Vue.js、React、Angular以及其他一些流行前端框架,帮助开发者根据项目需求和技术背景做出明智的选择。 1. Vue.js 概述 Vue.js是一个渐进式JavaScript框架,由尤雨溪…

微信小程序中的 `<block>` 元素:高效渲染与结构清晰的利器

微信小程序中的 <block> 元素&#xff1a;高效渲染与结构清晰的利器 在微信小程序的开发中&#xff0c;<block> 元素扮演着举足轻重的角色。尽管它不会在页面中渲染任何可见的节点&#xff0c;但作为一个逻辑上的容器&#xff0c;<block> 在条件渲染和循环渲…

微信小程序操作蓝牙

主要流程&#xff1a; 1.初始化蓝牙适配器openBluetoothAdapter&#xff0c;如果不成功就onBluetoothAdapterStateChange监听蓝牙适配器状态变化事件 2.startBluetoothDevicesDiscovery开始搜寻附近的蓝牙外围设备 3.onBluetoothDeviceFound监听寻找到新设备的事件&#xff0c;…

计算机视觉实战项目4(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)

往期热门项目回顾&#xff1a; 计算机视觉项目大集合 改进的yolo目标检测-测距测速 路径规划算法 图像去雨去雾目标检测测距项目 交通标志识别项目 yolo系列-重磅yolov9界面-最新的yolo 姿态识别-3d姿态识别 深度学习小白学习路线 AI健身教练-引体向上-俯卧撑计数…