学习笔记——JAVA设计模式<3>建造者模式

来源:互联网 发布:微信如何打开淘宝链接 编辑:程序博客网 时间:2024/06/05 14:17

建造者模式
分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用
由于实现了构建和装配的解耦。不同的构造器,相同的装配,也可以做出不同的对象;相同的构造器,不同的装配顺序也可以做出不同的对象。也就是实现了构造算法,装配算法的解耦,实现了更好的复用。

工厂模式创建产品 建造者模式把产品组装

建立汽车类

package studyGFO;/** * 汽车 * @author http://blog.csdn.net/thewaiting * */public class Car {    private Engine engine;    private Seat seat;    private Tyre tyre;    public void run() {        System.out.println("跑得快!");    }    public Engine getEngine() {        return engine;    }    public void setEngine(Engine engine) {        this.engine = engine;    }    public Seat getSeat() {        return seat;    }    public void setSeat(Seat seat) {        this.seat = seat;    }    public Tyre getTyre() {        return tyre;    }    public void setTyre(Tyre tyre) {        this.tyre = tyre;    }}class Engine {    private String engine;// 发动机    public Engine(String engine) {        super();        this.engine = engine;    }    public String getEngine() {        return engine;    }    public void setEngine(String engine) {        this.engine = engine;    }}class Seat {    private String Seat;// 椅子    public Seat(String seat) {        super();        Seat = seat;    }    public String getSeat() {        return Seat;    }    public void setSeat(String seat) {        Seat = seat;    }}class Tyre {    private String tyre;// 轮胎    public Tyre(String tyre) {        super();        this.tyre = tyre;    }    public String getTyre() {        return tyre;    }    public void setTyre(String tyre) {        this.tyre = tyre;    }}

建造汽车的接口

package studyGFO;public interface CarBuilder {    Engine builderEngine();    Seat builderSeat();    Tyre builderTyre();}

组装汽车的接口

package studyGFO;public interface CarDirector {    Car createCar();//组装汽车}

建造汽车的实现

package studyGFO;public class BMWCarBuilder implements CarBuilder{    @Override    public Engine builderEngine() {        System.out.println("构建发动机");        //可以运用工厂来构造这个零件 也可以单例模式构造唯一的零件        return new Engine("宝马发动机");    }    @Override    public Seat builderSeat() {        System.out.println("构建座椅");        return new Seat("宝马座椅");    }    @Override    public Tyre builderTyre() {        System.out.println("构建轮胎");        return new Tyre("宝马轮胎");    }}

组装汽车的实现

package studyGFO;public class BMWCarDirector implements CarDirector{    private CarBuilder builder;    public BMWCarDirector(CarBuilder builder) {        super();        this.builder = builder;    }    @Override    public Car createCar() {        Engine engine = builder.builderEngine();        Seat seat = builder.builderSeat();        Tyre tyre = builder.builderTyre();        //装配汽车对象        Car car = new Car();        car.setEngine(engine);        car.setSeat(seat);        car.setTyre(tyre);        return car;    }}

测试建造一个汽车

package studyGFO;public class Client {    public static void main(String[] args) {        //找到组装汽车的实现类 然后再找建造汽车的实现类        CarDirector director = new BMWCarDirector(new BMWCarBuilder());        //调用组装汽车的方法        Car car = director.createCar();        //组装好一辆汽车        System.out.println(car.getEngine().getEngine());        car.run();    }}

建造汽车零件和组装汽车分离了

原创粉丝点击