建造者模式又叫生成器模式,定义如下:
将一个复杂对象的构造与它的表示分离,是的同样的构建过程 可以创建不同的表示
建造者模式的通用类图如下:
代码如下:
public abstract class Bulider {
// 设置产品的不同部分,即组装产品
public abstract void setPart();
// 返回产品
public abstract Product bulidPart();
}
public class ConcreteBuilder extends Bulider {
private Product product=new Product();
/**
*
*/
@Override
public void setPart() {
product.setPart1("xxxx");
product.setPart2("xxxx");
}
/**
* @return
*/
@Override
public Product bulidPart() {
return this.product;
}
}
public class Product {
private String part1;
private String part2;
public String getPart1() {
return part1;
}
public void setPart1(String part1) {
this.part1 = part1;
}
public String getPart2() {
return part2;
}
public void setPart2(String part2) {
this.part2 = part2;
}
}
public class Director {
private Bulider bulider = new ConcreteBuilder();
public Product getProduct() {
bulider.setPart();
return bulider.bulidPart();
}
}
下面用一个画笔的例子来说明一下建造者模式,类图如下:
public class PaintBrush {
private String color = "黑色";
// 形状:入矩形、原型、直线等等
private String shape;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getShape() {
return shape;
}
public void setShape(String shape) {
this.shape = shape;
}
}
public abstract class BrushBulider {
// 组装画笔
public abstract void bulidPart();
//创建画笔
public abstract PaintBrush createPaintBrush();
}
public class LineBrush extends BrushBulider {
private PaintBrush paintBrush = new PaintBrush();
/**
*
*/
@Override
public void bulidPart() {
paintBrush.setColor("红色");
paintBrush.setShape("直线");
}
/**
* @return
*
*/
@Override
public PaintBrush createPaintBrush() {
// TODO Auto-generated method stub
return paintBrush;
}
}
public class CircleBrush extends BrushBulider {
private PaintBrush paintBrush = new PaintBrush();
/**
*
*/
@Override
public void bulidPart() {
paintBrush.setColor("黄色");
paintBrush.setShape("椭圆");
}
/**
* @return
*/
@Override
public PaintBrush createPaintBrush() {
// TODO Auto-generated method stub
return paintBrush;
}
}
public class Director {
public static void main(String[] args) {
// 创建一个直线画笔
BrushBulider bulider = new LineBrush();
// 组装画笔
bulider.bulidPart();
// 生成画笔
PaintBrush paintBrush = bulider.createPaintBrush();
}
}
建造者模式大致的就是这样,可能这个例子不是很恰当,只是为了说明一下建造模式的场景,建造者模式和工厂模式很像,但是两者的关注点不同,工厂模式关注的是整体,我们可以想象成现实中的工厂,我们生产一辆汽车,工程模式生产出的汽车都是一样,它不会关注如何组装各个零件,但是建造者模式关注的零部件的组装,由于组装的不同顺序或者型号不同而产生的结果不同。