创建型模式之建造者模式

建造者模式(Builder)

image

与抽象工厂的区别:在建造者模式里,有个指导者(Director),由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。即建造者模式可以强制实行一种分步骤进行的建造过程。

建造者模式四要素:

1.产品类Product:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。

2.抽象建造者类Builder: 将建造的具体过程交与它的子类来实现,这样更容易扩展。

3.建造者类ConcreteBuilder: 组建产品;返回组建好的产品。

4.指导类Director: 负责调用适当的建造者来组建产品,指导类一般不与产品类发生依赖关系,与指导类直接交互的是建造者类。

建造者模式优点:

1.建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和建造者类是比较稳定的,因此,将主要的业务逻辑封装在指导者类中对整体而言可以取得比较好的稳定性。

2.建造者模式很容易进行扩展。如果有新的需求,通过实现一个新的建造者类就可以完成。

适用场景

需要生成的对象具有复杂的内部结构;需要生成的对象内部属性本身相互依赖。

class Car {
    //frame
    String frame;
    //engine
    String engine;
    //wheel
    String wheel;
    //...
}

interface Builder {
    void buildFrame();

    void buildEngine();

    void buildWheel();

    Car buildCar();
}

//911制造者
class Builder911 implements Builder {
    Car car = new Car();

    @Override
    public void buildFrame() {
        System.out.println("制造911骨架");
    }

    @Override
    public void buildEngine() {
        System.out.println("制造911引擎");
    }

    @Override
    public void buildWheel() {
        System.out.println("制造911引擎");
    }

    @Override
    public Car buildCar() {
        System.out.println("911汽车各部组装完毕");
        return car;
    }
}

//Cayma制造者
class BuilderCayma implements Builder {
    Car car = new Car();

    @Override
    public void buildFrame() {
        System.out.println("制造Cayma骨架");
    }

    @Override
    public void buildEngine() {
        System.out.println("制造Cayma引擎");
    }

    @Override
    public void buildWheel() {
        System.out.println("制造Cayma轮子");
    }

    @Override
    public Car buildCar() {
        System.out.println("Cayma汽车各部组装完毕");
        return car;
    }
}

//指导者
class Director {
    private Builder builder;

    //传入具体制造者
    public Director(Builder builder) {
        this.builder = builder;
    }

    public Car build() {
        //制造汽车各个组件
        builder.buildFrame();
        builder.buildEngine();
        builder.buildWheel();
        return builder.buildCar();
    }
}

public class Main {

    public static void main(String[] args) {
        //制造一台911
        Builder builder = new Builder911();
        Director director = new Director(builder);
        Car car911 = director.build();
        //制造Cayma
        Builder build = new BuilderCayma();
        Director dir = new Director(build);
        Car caym = dir.build();
    }

}

结果

制造911骨架
制造911引擎                       
制造911引擎                 
911汽车各部组装完毕            
制造Cayma骨架          
制造Cayma引擎               
制造Cayma轮子          
Cayma汽车各部组装完毕    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值