Java设计模式(建造者模式)

package com.jxufe;

import lombok.Data;

@Data
public class House {

    private String base;
    private String walls;
    private String roofed;
}

package com.jxufe;

//抽象的建造者
public abstract class HouseBuilder {
    House house = new House();

    //将建造的流程写好,抽象的方法
    public abstract void buildBasic();
    public abstract void buildWalls();
    public abstract void buildRoofed();

    //建造好房子,将房子返回
    public House buildHouse() {
        return house;
    }

}

package com.jxufe;

public class CommonHouse extends HouseBuilder {

    public void buildBasic() {
        house.setBase("普通地基");
        System.out.println("普通房子打地基");
    }

    public void buildWalls() {
        house.setWalls("普通围墙");
        System.out.println("普通房子砌围墙");
    }

    public void buildRoofed() {
        house.setRoofed("普通屋顶");
        System.out.println("普通房子建屋顶");
    }
}

package com.jxufe;

public class HighHouse extends HouseBuilder {

    public void buildBasic() {
        house.setBase("高楼地基");
        System.out.println("高楼打地基");
    }

    public void buildWalls() {
        house.setWalls("高楼围墙");
        System.out.println("高楼建围墙");
    }

    public void buildRoofed() {
        house.setRoofed("高楼房顶");
        System.out.println("高楼盖房顶");
    }
}

package com.jxufe;

//指挥者,这里去指定制作流程,返回产品
public class HouseDirector {

    HouseBuilder houseBuilder = null;

    //构造器传入houseBuilder
    public HouseDirector(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    //通过setter传入houseBuilder
    public void setHouseBuilder(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    //如何处理建造房子的流程,交给指挥者
    public House constructHouse() {
        houseBuilder.buildBasic();
        houseBuilder.buildWalls();
        houseBuilder.buildRoofed();
        return houseBuilder.buildHouse();
    }
}

package com.jxufe;

public class Client {

    public static void main(String[] args) {
        //盖普通房子
        CommonHouse commonHouse = new CommonHouse();
        //准备创建房子的指挥者
        HouseDirector houseDirector = new HouseDirector(commonHouse);
        //完成盖房子,返回产品
        House house = houseDirector.constructHouse();
        System.out.println(house.toString());

        System.out.println("==================================");

        //盖高楼
        HighHouse highHouse = new HighHouse();
        houseDirector.setHouseBuilder(highHouse);
        house = houseDirector.constructHouse();
        System.out.println(house.toString());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值