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

相关推荐
Mr Lee_8 分钟前
android 配置鼠标右键快捷对apk进行反编译
android
顾北川_野43 分钟前
Android CALL关于电话音频和紧急电话设置和获取
android·音视频
&岁月不待人&1 小时前
Kotlin by lazy和lateinit的使用及区别
android·开发语言·kotlin
wrx繁星点点2 小时前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式
Winston Wood3 小时前
Android Parcelable和Serializable的区别与联系
android·序列化
清风徐来辽3 小时前
Android 项目模型配置管理
android
金池尽干3 小时前
设计模式之——观察者模式
观察者模式·设计模式
帅得不敢出门3 小时前
Gradle命令编译Android Studio工程项目并签名
android·ide·android studio·gradlew
也无晴也无风雨3 小时前
代码中的设计模式-策略模式
设计模式·bash·策略模式
problc4 小时前
Flutter中文字体设置指南:打造个性化的应用体验
android·javascript·flutter