设计模式学习笔记之建造者模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32131937/article/details/70340250

创建者模式用来创建一个较为复杂的对象,通过该模式隐藏了较为复杂的创建过程,用户只需要使用创建功能就能获取到构造出的复杂的对象。下面是我对该模式理解后画的一张图
建造者模式
下面通过代码和图进行说明:
1.首先我们要创建一个房子House,定义了一个类。

public class House {
    private String floor;
    private String wall;
    private String housetop;
    public String getFloor() {
        return floor;
    }
    public void setFloor(String floor) {
        this.floor = floor;
    }
    public String getWall() {
        return wall;
    }
    public void setWall(String wall) {
        this.wall = wall;
    }
    public String getHousetop() {
        return housetop;
    }
    public void setHousetop(String housetop) {
        this.housetop = housetop;
    }
}

2.我们要去建这个房子House,但是不知道建什么样的房子,所以定义一个建房子的接口HouseBuilder,只用来定义建房子的方法。


public interface HouseBuilder {
    public void makeFloor();
    public void makeWall();
    public void makeHousetop();
    public House getHouse();

}

3.既然要建房子,就要知道建什么样的房子,比如平房,公寓,那么就创建类实现建房子的接口,该具体的建什么样的对象的类就是建造者,创建出具体的对象是什么样的,并定义方法返回建出的对象。
平房:

public class PingFangBuilder implements HouseBuilder {
    House house = new House();
    public void makeFloor() {
        house.setFloor("平房-->地板");
    }
    public void makeWall() {
        house.setHousetop("平房-->房顶");
    }
    public void makeHousetop() {
        house.setWall("平房-->墙");
    }
    public House getHouse() {
        return house;
    }
}

公寓:

public class GongYuBuilder implements HouseBuilder {
    House house = new House();
    public void makeFloor() {
        house.setFloor("公寓-->地板");
    }
    public void makeWall() {
        house.setHousetop("公寓-->房顶");
    }
    public void makeHousetop() {
        house.setWall("公寓-->墙");
    }
    public House getHouse() {
        return house;
    }
}

4.虽然建造者实现了建造过程,但是用户使用的时候需要自己执行set方法进行建造,这样就会很麻烦,用户需要知道建造过程,所以我们还需要一个类,指挥该建造者进行建造。

public class HouseDicrector {
    //传入的builder是具体的建造者
    public HouseDicrector(HouseBuilder builder){
        builder.makeFloor();
        builder.makeHousetop();
        builder.makeWall();
    }
}

5.用户使用,使用时用户需要的是House的对象house,用户需要什么样的对象house则获取相应的建造者PingFangBuilder或GongYuBuilder。
将获取到的house对象传入指挥者,指挥者让建造者进行建造。

public class MainClass {
    public static void main(String[] args) {
        HouseBuilder houseBuilder = new GongYuBuilder();
        HouseDicrector hd = new HouseDicrector(houseBuilder);
        House house = houseBuilder.getHouse();
        System.out.println(house.getFloor());
        System.out.println(house.getHousetop());
        System.out.println(house.getWall());
    }
}

执行结果如下:
建造结果

注:代码来自网络教学视频,新手上路,理解不正确的地方敬请指出

猜你喜欢

转载自blog.csdn.net/qq_32131937/article/details/70340250