建造者模式

建造者模式:
将一个复杂对象的构建也它的表示分离,使得同样的构建过程可创建不同的表示。
创建者模式组成:
这里写图片描述

1、抽象建造者角色(Builder):为创建一个Product对象的各个部件指定的抽象类或接口。

2、具体建造者类(ConcreteBuilder):实现Builder接口,构造和装配各个部件。

3、产品角色(Product):产品角色类。

4、指挥者角色(Director):根据需求使用Builder接口的对象,用来指挥创建产品顺序。

建造者模式主要应用在规定建造顺序。比如我们盖楼房,不管是3层的小楼,还是30层的高楼,房屋内部各不相同,但第一步总是打地基,然后修框架等操作。建造模式就是解决这类情况:即流程不变,但流程的具体细节是会变化的。

代码实例:
现在要生成车,车暂时由引擎、车轮和外壳组成。组成工序是不变的。

// Builder角色
abstract public class Builder {

    abstract public void Engine();
    abstract public void Wheel();
    abstract public void Shell();
}

// 宝马车建造者
public class BwmBuilder extends Builder {

    @Override
    public void Engine() {
        // TODO Auto-generated method stub
        System.out.println("建造宝马车引擎。");
    }

    @Override
    public void Wheel() {
        // TODO Auto-generated method stub
        System.out.println("建造宝马车轮子。");
    }

    @Override
    public void Shell() {
        // TODO Auto-generated method stub
        System.out.println("建造宝马车外壳。");
    }
}

// 奔驰车建造者
public class BenzBuilder extends Builder {

    @Override
    public void Engine() {
        // TODO Auto-generated method stub
        System.out.println("建造奔驰车引擎。");
    }

    @Override
    public void Wheel() {
        // TODO Auto-generated method stub
        System.out.println("建造奔驰车轮子。");
    }

    @Override
    public void Shell() {
        // TODO Auto-generated method stub
        System.out.println("建造宝奔驰车外壳。");
    }
}

// 指挥者类
public class Director {

    private Builder builder = null;
    public Director(Builder builder) {
        // TODO Auto-generated constructor stub
        this.builder = builder;
    }

    // 按预定顺序造车
    public void CreateCar(){
        builder.Engine();
        builder.Wheel();
        builder.Shell();
    }
}

// 客户端
public class Client {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Builder builder = new BwmBuilder();
        Builder builder2 = new BenzBuilder();

        Director directorBwm = new Director(builder);
        Director directorBenz = new Director(builder2);

        directorBwm.CreateCar();
        directorBenz.CreateCar();
    }

}

分析:
首先,建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和建造者类是比较稳定的,因此,将主要的业务逻辑封装在指挥类中对整体而言可以取得比较好的稳定性。
其次,建造者模式很容易进行扩展。如果有新的需求,通过实现一个新的建造者类就可以完成,基本上不用修改之前已经测试通过的代码,因此也就不会对原有功能引入风险。

另外,指挥者规定了建造产品的具体顺序,建造过程被约束,只能按照一定流程顺序建造。就像上列中客户端建造汽车只能先造引擎,然后是轮子,最后是汽车。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值