设计模式之建造者模式

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,使用多个简单的对象一步一步构建成一个复杂的对象,建造代码与表示代码分离

产品类:

@ToString
class Product {

    List<String> parts = new ArrayList<>();

    public void addPart(String part) {
        parts.add(part);
    }
}

抽象建造者:

abstract class AbstractBuilder {

    protected abstract void buildPartA();

    protected abstract void buildPartB();

    protected abstract Product getResult();
}

具体建造者实现:

/**
 * 具体建造者1
 */
class ConcreteBuilder1 extends AbstractBuilder {

    private Product product = new Product();

    @Override
    protected void buildPartA() {
        product.addPart("部件A");
    }

    @Override
    protected void buildPartB() {
        product.addPart("部件B");
    }

    @Override
    protected Product getResult() {
        return product;
    }
}

/**
 * 具体建造者2
 */
class ConcreteBuilder2 extends AbstractBuilder {

    private Product product = new Product();

    @Override
    protected void buildPartA() {
        product.addPart("部件X");
    }

    @Override
    protected void buildPartB() {
        product.addPart("部件Y");
    }

    @Override
    protected Product getResult() {
        return product;
    }
}

指挥者类:

/**
 * 指挥者类
 */
class Director{

    public void construct(AbstractBuilder abstractBuilder){
        abstractBuilder.buildPartA();
        abstractBuilder.buildPartB();
    }
}

客户端调用:

        Director director = new Director();

        AbstractBuilder builder1 = new ConcreteBuilder1();
        director.construct(builder1);
        Product product1 = builder1.getResult();
        log.info(product1);

        AbstractBuilder builder2 = new ConcreteBuilder2();
        director.construct(builder2);
        builder2.getResult();
        Product product2 = builder2.getResult();
        log.info(product2);

结果:

17:17:03.906 [main] INFO com.learn.putc.designpatterns.create.builder.BuilderPattern - Product(parts=[部件A, 部件B])
17:17:03.913 [main] INFO com.learn.putc.designpatterns.create.builder.BuilderPattern - Product(parts=[部件X, 部件Y])

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值