您的位置:首页 > 产品设计 > UI/UE

设计模式之构建者模式(Builder)

2018-03-22 17:37 225 查看

Builder设计模式

Demo地址

https://github.com/rocky123shine/Builder

概念

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

Builder使用场景

相同的方法,不同的执行顺序,产生不同的事件结果时;

多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时;

产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效果,这个时候使用建造者模式非常合适;

当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值时。

Builder实现和使用

Builder实现

生成一个类A,内置一个静态类,在A中声明静态类的对象

A类构造方法私有化 参数为内部静态类的对象,给A中的对象赋值

在内部静态类中生成所有需要的属性,生成set方法,set方法返回内部类对象

在内部类中提供bulid方法 目的是提供A的对象

public class A {
private Builder builder;

private A(Builder builder) {
this.builder = builder;
}

public static class Builder {
private String name;
private String number;
private String price;

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

public Builder setNumber(String number) {
this.number = number;
return this;
}

public Builder setPrice(String price) {
this.price = price;
return this;
}

public A build() {
return new A(this);
}
}
...
}


Builder使用

A.Builder builder = new A.Builder();
A a = builder.setName("Apple").setNumber("IphoneX").setPrice("6800").build();


这样的话把复杂的参数通过链式设置完成,避免了参数过于复杂且易乱,分不清谁是谁的问题,最后返回A的对象,这样就可以操作A中的其他方法了

Builder实际应用举例

我这里就写了一个简单的Builder,下面我举几个使用Builder的框架,以便我们深入了解和学习Builder。

例如:OKHttp、Retrofit、RxJava、ImageLoader、Volley、AlertDialog等等…都使用了Builder。

这里我们对AlertDialog是最熟悉不过的,大家可以模仿一下源码写个Demo,这样会对Builder设计模式有一个更加深刻的认识
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: