Builder模式是将构建复杂对象的过程和它的部件解耦.
因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多部件:车轮 方向盘 发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一辆汽车,这个装配过程也很复杂(需要很好的组装技术),Builder模式就是为了将部件和组装过程分开.
理解Builder模式:
生产流水线:以前是手工业作坊式的人工单个单个的生产零件然后一步一步组装做,好比有了工业革命,现在都由生产流水线代替了。如要造丰田汽车,先制定汽车的构造如由车胎、方
向盘、发动机组成。再以此构造标准生产丰田汽车的车胎、方向盘、发动机。然后进行组装。最后得到丰田汽车.
举例:
看到网上一个造房子的例子比较好理解,所以就拿来借用下.造房子本身比较复杂,因为各个部件如门,窗,墙,栋梁等需要建筑工人的构造,还有各个部件的组装就更显得重要而复杂,所以一般都要有设计师来画图来指挥各个部件的组装.而设计师本身也不干活,光是下命令,这里砌一堵墙,这里砌一扇门,这样建筑工人开始建设,最后,我可以向建筑工人要房子了。在这个过程中,设计师是什么也没有,除了他在脑子里的设计和命令,所以要房子也是跟建筑工人要,记住了!
package builder;
public interface Builder
{
public void makeWindow();
public void makeFloor();
public Room getRoom();
}
/*************************************************************/
package builder;
public class Designer {
public Designer() {
}
public void order(Builder builder)
{
builder.makeWindow();
builder.makeFloor();
}
}
/*************************************************************/
package builder;
public class Worker implements Builder{
private String window="";
private String floor="";
public Worker() {
}
public void makeWindow(){
window=new String("window");
}
public void makeFloor(){
floor=new String("floor");
}
public Room getRoom()
{
if((!window.equals(""))&&(!floor.equals("")))
{
System.out.println("room ready!");
return new Room();
}
else return null;
}
}
/*************************************************************/
package builder;
public class Room {
private String window="";
private String floor="";
public Room() {
}
}
/*************************************************************/
package builder;
public class Client {
public Client() {
}
public static void main(String[] args) {
Builder worker=new Worker();
Designer designer=new Designer();
designer.order(worker);
worker.getRoom();
}
}