设计模式(3)Builder模式
定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
使用场景
- 相同的方法,不同的执行顺序,产生不同的事件结果时。
- 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。
- 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个使用建造者模式非常适合。
- 当初始化一个对象特别复杂时,如参数多,且很多参数有默认值。
简单实现
public interface Builder {
//创建部件A 比如创建汽车车轮
void buildPartA();
//创建部件B 比如创建汽车方向盘
void buildPartB();
//创建部件C 比如创建汽车发动机
void buildPartC();
//返回最后组装成品结果 (返回最后装配好的汽车)
Product getResult();
}
//Director 类,负责制造
public class Director {
private Builder builder;
public Director( Builder builder ) {
this.builder = builder;
}
// 将部件partA partB partC最后组成复杂对象
//这里是将车轮 方向盘和发动机组装成汽车的过程
public void construct() {
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
}
}
public class ConcreteBuilder implements Builder {
Part partA, partB, partC;
public void buildPartA() {
//这里是具体如何构建partA的代码
};
public void buildPartB() {
//这里是具体如何构建partB的代码
};
public void buildPartC() {
//这里是具体如何构建partB的代码
};
public Product getResult() {
//返回最后组装成品结果
};
}
public interface Product { } //产品
public interface Part { } //部件
//调用
ConcreteBuilder builder = new ConcreteBuilder();
Director director = new Director(builder);
director.construct();
Product product = builder.getResult();
从上面可以看到由于Director封装了构建复杂的产品对象过程,对外隐藏了细节。
现实开发中,Director一般被省略。而直接使用一个Builder来进行对象的组装,这个Builder通常为链式调用,每个调用方法返回自身引用。代码大致如下:
new TestBuilder().methodA("A").methodB("B").create();
Android源码中的Builder模式
AlertDialog.Builder
OKHttp/Glide
总结
优点:
(1)良好的封装性,使用建造者模式可以使客户端不必知道产品内部组成细节。
(2)建造者独立,容易扩展。
缺点:
(1)会产生多余的Builder对象及Director对象,消耗内存。
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/12/design-pattern-builder-mode/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
THE END
0
二维码
打赏
海报
设计模式(3)Builder模式
定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
使用场景
相同的方法,不同的执行顺序,产生不同的事件结果时。
多个……
文章目录
关闭
共有 0 条评论