根据个人的经验来说,建造者模式多数用于比较复制的对象构建时,为了简化调用者的逻辑处理用的,简单来说就是调用的时候写更少的代码吧。。。
举例说明:电脑厂商要组装一台电脑(从整体上分为主机,显示器,键盘,鼠标),我们为每个部件提供一种选择(真正的产品完全可以有很多选择)
public class Host(){...}
public class Monitor(){...}
public class KeyBoard(){...}
public class Mouse(){...}
X厂商要组装一个XComputer类型的电脑:
public class XComputer(){
private Host host;
private Monitor monitor;
private KeyBoard keyboard;
private Mouse mouse;
}
使用原始的使用方式组装一台电脑:
XComputer computer = new XComputer();
AHost host = new AHost();
computer.setHost(host);
....
....
现在我们使用使用创建者模式:
1. 我们首先就需要选定各个部件,所以我们定义一个接口作为选定部件用
public interface ComputerBuilder{
Host buildHost(); //选主机
Monitor buildMonitor();//选显示器
KeyBoard buildKeyBoard();//选键盘
Mouse buildMouse();//选鼠标
}
2. 我们为X厂商定义一个接口,用于组装电脑用:
public interface ComputerDirector{
XComputer createComputer();
}
3. 为X封装一个类,实现选部件接口
public class XComputerBuilder implements ComputerBuilder{
@Override
public Host buildHost(){
return new Host();
}
...
}
4. 为X提供一个类,实现组装接口完成组装
public class XComputerDirector implements ComputerDirector {
private ComputerBuilder builder;
public XComputerDirector(ComputerBuilder builder){
this.builder = builder
}
@Override
public XComputer createComputer(){
Host host = builder.buildHost();
Monitor monitor = builder.buildMonitor();
KeyBoard keyboard = builder.buildKeyboard();
Mouse mouse = builder.buildMouse();
XComputer computer = new XComputer();
computer.setHost(host);
computer.setMonitor(monitor);
computer.setKeyboard(keyboard);
computer.setMouse(mouse);
return computer;
}
}
此时每次要组装一台XComputer,
XComputer computer = XComputerDirector(new XcomputerBuilder());
一般项目很少创建者模式,但是当涉及到大规模的产品 时 就非常有优势了,可以开下脑洞,怎么结合工厂模式变得更灵活。比如有多个工厂都要组装自己品牌的电脑,提供的部件也有多种类型时。。。