个人感觉Builder模式是继单例模式后,最好理解也最好写的设计模式了。
1.1 Builder模式介绍
Builder模式是一步一步的创建一个复杂对象的创建模式。将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示
1.2 UML类图
image.pngBuilder模式的使用场景:
1) 相同的方法,不同的执行顺序产生不同的结果
2) 初始化一个对象特别复杂,参数很多,而且这些参数都有默认值的时候。
1.3 Builder模式示例
Builder是如此的简单以至于直接举个例子就能明白。就拿组装电脑(Computer
)举例子吧,如果要去电脑城买一台组装电脑,那么大概需要CPU、主板、硬盘这个大件。
- 第一步定义需要哪些东西组成:
public abstract class Builder {
//第一步:装CPU
//声明为抽象方法,具体由子类实现
public abstract void BuildCPU();
//第二步:装主板
//声明为抽象方法,具体由子类实现
public abstract void BuildMainboard();
//第三步:装硬盘
//声明为抽象方法,具体由子类实现
public abstract void BuildHD();
//返回产品的方法:获得组装好的电脑
public abstract Computer GetComputer();
}
- 第二步定义如何组装这些东西:
public class Director{
//指挥装机人员组装电脑
public void Construct(Builder builder){
builder. BuildCPU();
builder.BuildMainboard();
builder. BuildHD();
}
}
- 第三部开始组装:
public class ConcreteBuilder extend Builder{
//创建产品实例
Computer computer = new Computer();
//组装产品
@Override
public void BuildCPU(){
computer.Add("组装CPU")
}
@Override
public void BuildMainboard(){
computer.Add("组装主板")
}
@Override
public void BuildHD(){
computer.Add("组装主板")
}
//返回组装成功的电脑
@Override
public Computer GetComputer(){
return computer
}
}
- 将上面的流程组合起来
public class Builder Pattern{
public static void main(String[] args){
//逛了很久终于发现一家合适的电脑店
//找到该店的老板和装机人员
Director director = new Director();
Builder builder = new ConcreteBuilder();
//沟通需求后,老板叫装机人员去装电脑
director.Construct(builder);
//装完后,组装人员搬来组装好的电脑
Computer computer = builder.GetComputer();
//组装人员展示电脑给小成看
computer.Show();
}
}
如果在Builder
的buildCPU()/buildHD()
等方法中返回Builder
本身还可以实现链式调用,进一步简化代码。在Director
中可以这样写:
public class Director{
//指挥装机人员组装电脑
public void Construct(Builder builder){
builder. BuildCPU();
.BuildMainboard();
. BuildHD();
}
}
这样就讲完了Builder模式,还是非常好理解的。优点在于能够精确地控制对象的参数,缺点也在于参数多的话,代码会非常长。
参考文章:https://blog.csdn.net/carson_ho/article/details/54910597
网友评论