设计模式-我用建造者模式生产水果
建造者模式也属于创建型模式的一种(用来创建对象的), 注重的是对象在创建的过程, 代码如下:
我最终需要的产品及其属性:
@Data
public class Fruit {
/**
* 颜色
*/
private String color;
/**
* 形状
*/
private String shape;
/**
* 外包装
*/
private String outerPackage;
}
水果加工工厂应该具有的流程:
/**
* @author xinruoxiangyang9010
*/
public abstract class FruitBuilder {
protected Fruit fruit = new Fruit();
/**
* 涂颜色
* @return
*/
abstract Fruit paint();
/**
* 加工形状
* @return
*/
abstract Fruit process();
/**
* 加工外包装
* @return
*/
abstract Fruit doPackage();
}
加工橙子的车间:
/**
* @author xinruoxiangyang9010
* 橙子加工车间
*/
public class OrangeFruitBuilder extends FruitBuilder {
@Override
Fruit paint() {
fruit.setColor("涂个橙色");
return fruit;
}
@Override
Fruit process() {
fruit.setShape("圆形中带一点椭圆");
return fruit;
}
@Override
Fruit doPackage() {
fruit.setOuterPackage("用橙色的盒子包装");
return fruit;
}
}
加工葡萄的车间:
/**
* @author xinruoxiangyang9010
* 葡萄制造车间
*/
public class GrapesFruitBuilder extends FruitBuilder {
@Override
Fruit paint() {
fruit.setColor("来个深紫色");
return fruit;
}
@Override
Fruit process() {
fruit.setShape("加工成一长串");
return fruit;
}
@Override
Fruit doPackage() {
fruit.setOuterPackage("深色盒子包装,带有多个圆形的花纹");
return fruit;
}
}
水果加工车间大师傅:
/**
* @author xinruoxiangyang9010
* 水果加工师傅(指挥者Director)
*/
public class FruitProducer {
private FruitBuilder fruitBuilder;
FruitProducer(FruitBuilder param) {
this.fruitBuilder = param;
}
public Fruit produceFruit() {
fruitBuilder.paint();
fruitBuilder.process();
fruitBuilder.doPackage();
return fruitBuilder.fruit;
}
}
启动车间, 为我分别加工两种水果:
/**
* @author xinruoxiangyang9010
* 生产一个水果
*/
public class BuilderClientTest {
public static void main(String[] args) {
FruitProducer fruitProducer = new FruitProducer(new OrangeFruitBuilder());
Fruit fruitOrange = fruitProducer.produceFruit();
System.out.println(fruitOrange);
// 结果: Fruit(color=橙色, shape=圆形中带一点椭圆, outerPackage=用橙色的盒子包装)
FruitProducer fruitProducer2 = new FruitProducer(new GrapesFruitBuilder());
Fruit fruitGrapes = fruitProducer2.produceFruit();
System.out.println(fruitGrapes);
// 结果: Fruit(color=深紫色, shape=加工成一长串, outerPackage=深色盒子包装,带有多个圆形的花纹)
}
}
简单说明
与工厂模式类似, 都属于创建型模式, 选择合适的去用
适合生产出来的最终产品(Fruit)不经常发生变化
产品创建过程发生变化时, 可在加工车间类(FruitBuilder)上进行修改
新增逻辑时在加工车间类上新增方法, 或者在水果加工大师傅(FruitProducor)中新增方法