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

在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开发中非常常见,尤其是在处理那些需要多个步骤来初始化的复杂对象时。

相关推荐
wWYy.43 分钟前
Mysql:一行数据是怎么存储的?
android·数据库·mysql
漏刻有时8 小时前
PHP GeoJSON转PNG地图渲染程序开发笔记、源码解读、问题复盘与整改方案
android·笔记·php
-SOLO-9 小时前
解决VMware 显示比例被重置的问题
android
alexhilton10 小时前
探究Android Views、Flutter和Compose如何渲染你的UI
android·kotlin·android jetpack
啦啦啦啦啦zzzz11 小时前
工具:动态类工厂和用配置文件存储属性
c++·设计模式·工具·动态工厂
Lesile13 小时前
Android:Hilt框架入门 · 在ViewUI和ComposeUI下的应用
android·android jetpack
用户4238162290713 小时前
Android 16 WebView 页面顶部挖孔/通知栏不能显示UI问题排查
android
weixin_7275356214 小时前
Loop 已死,Graph 新生:AI 工作流的范式革命
android·人工智能·rxjava
严同学正在努力14 小时前
从备份到恢复:我用 30 分钟恢复了误删的核心业务表
android·java·数据库·ai
梦想三三15 小时前
LangChain Output Parser 实战:从字符串到结构化数据的完整指南
android·服务器·langchain·github·uv