建造者设计模式理解二(附带改进的demo)

一、在上一篇博客中,我大概写出了建造者设计模式的简单逻辑,但是在上一篇的代码里面还是有设计不好的地方,就是客户端建造一个房子,要提供给客户端的信息量太多了,不仅要知道具体的工人,还要知道具体的建造公司。所以就不符合java最少知道原则的设计理念。接下来的代码我会在原有的基础上,再次重构,简化生成新的建造者模型出来。

二、新建新的包noddesigner,只保留原有的WorkBuilder\Room两个类:


三、将Room类中的set、get方法全部剔除掉,并在workbuilder类中创建一个副本(内部类RoomParams):

public class Room {
    private String window;
    private String floor;

    public void apply(WorkBuilder.RoomParams params) {
        window = params.window;
        floor = params.floor;
    }

    @Override
    public String toString() {
        return "Room{" +
                "window='" + window + '\'' +
                ", floor='" + floor + '\'' +
                '}';
    }
}

四、 WrokBuilder类的改进为:

public class WorkBuilder {

    public RoomParams params;

    public WorkBuilder() {
        this.params = new RoomParams();
    }

    public WorkBuilder makeWindow(String window) {
        params.window = window;
        return this;
    }

    public WorkBuilder makeFloor(String floor) {
        params.floor = floor;
        return this;
    }

    public Room build() {
        Room room = new Room();
        room.apply(params);
        return room;
    }

    public class RoomParams{
        public String window;
        public String floor;
    }
}

五、最后看看真正客户端的调用代码:

public class Client {

    @Test
    public void test() {

        Room room = new WorkBuilder()
                .makeWindow("fashi").makeFloor("oushi").build();
        System.out.print(room);
    }
}

写到这里,大家可以清楚的看到Room房子的产生只保留了WorkBuilder这个类的调用,并且我们可以随意设置里面的参数,而不影响我们的代码结构。

代码下载地址:https://github.com/cWX411904/Builder

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值