设计模式-我用建造者模式生产水果

设计模式-我用建造者模式生产水果

建造者模式也属于创建型模式的一种(用来创建对象的), 注重的是对象在创建的过程, 代码如下:

我最终需要的产品及其属性:
@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)中新增方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值