定义:Builder模式是一步一步创建一个复杂的对象,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 是为了将构建复杂对象的过程和它的部件解耦.
通常为四个角色:
i) 抽象建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的构造;
ii)具体建造者(ConcretBuilder)角色:它在应用程序的调用下创建产品的实例。完成任务为;
a) 实现抽象建造者Builder接口,给出一步步完成创建产品实例的操作;
b) 在创建完成后,提供产品的实例。
iii) 导演者(Director角色):调用具体建造者角色以创建产品对象;
iv)产品(Product)角色:建造中的复杂对象。一般情况下,一个系统不止一个产品类。
假如我们要组装一台电脑(Computer类),里面有三个配件(Keyboard类,MainFrameBox类,Monitor类)
测试代码
通常为四个角色:
i) 抽象建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的构造;
ii)具体建造者(ConcretBuilder)角色:它在应用程序的调用下创建产品的实例。完成任务为;
a) 实现抽象建造者Builder接口,给出一步步完成创建产品实例的操作;
b) 在创建完成后,提供产品的实例。
iii) 导演者(Director角色):调用具体建造者角色以创建产品对象;
iv)产品(Product)角色:建造中的复杂对象。一般情况下,一个系统不止一个产品类。
假如我们要组装一台电脑(Computer类),里面有三个配件(Keyboard类,MainFrameBox类,Monitor类)
/**
* Computer类 里面有com.jeedroid.part包里的三个属性
*/
package com.jeedroid.product;
import com.jeedroid.part.*;
public class Computer
{
private Keyboard keyboard;
private MainFrameBox mainFrameBox;
private Monitor monitor;
public Keyboard getKeyboard()
{
return keyboard;
}
public void setKeyboard(Keyboard keyboard)
{
this.keyboard = keyboard;
}
public MainFrameBox getMainFrameBox()
{
return mainFrameBox;
}
public void setMainFrameBox(MainFrameBox mainFrameBox)
{
this.mainFrameBox = mainFrameBox;
}
public Monitor getMonitor()
{
return monitor;
}
public void setMonitor(Monitor monitor)
{
this.monitor = monitor;
}
public Computer(Keyboard keyboard, MainFrameBox mainFrameBox, Monitor monitor)
{
super();
this.keyboard = keyboard;
this.mainFrameBox = mainFrameBox;
this.monitor = monitor;
}
}
/**
* 这个类调用CreatorComputer类来完成组装工作
*/
package com.jeedroid.designpattern;
import com.jeedroid.product.Computer;
public class Director
{
private Builder builder;
public Director(Builder builder)
{
this.builder=builder;
}
public void construct()
{
builder.buildKeyboard();
builder.buildMainFrameBox();
builder.buildMonitor();
}
}
/**
* 这个类负责具体的组装工作
*/
package com.jeedroid.designpattern;
import com.jeedroid.part.Keyboard;
import com.jeedroid.part.MainFrameBox;
import com.jeedroid.part.Monitor;
import com.jeedroid.product.Computer;
public class CreatorComputer implements Builder
{
private Keyboard keyboard;
private MainFrameBox mainFrameBox;
private Monitor monitor;
private Computer computer;
@Override
public Keyboard buildKeyboard()
{
keyboard=new Keyboard("keyboard");
return keyboard;
}
@Override
public MainFrameBox buildMainFrameBox()
{
mainFrameBox=new MainFrameBox("MainFrameBox");
return mainFrameBox;
}
@Override
public Monitor buildMonitor()
{
monitor=new Monitor("monitor");
return null;
}
@Override
public Computer getComputer()
{
computer=new Computer(keyboard,mainFrameBox,monitor);
return computer;
}
}
测试代码