基于Java从零开始实现设计模式(二)——Builder模式

Builder模式:此模式下,用户不用知道内部构建细节,可以更好的控制构建流程。一个复杂对象可以有很多参数、部件,Builder模式就是为了将创建这个复杂对象的过程和对象的众多参数部件分开,已达到解耦的目的。
一般过程:
1、私有化构建方法,使其只能通过内部类Builder的build方法创建
2、静态内部类作为桥梁,可以设置所有参数
3、通过build的方法创建Person实例。
4、由于Builder这个桥梁,使得构建时可以设置不同参数,把构建和参数解耦。
5、创建实例后,参数不可再改。
6、隐藏了构建过程,我们还可以在构建过程中增加一些处理,这些处理都是隐藏的,比如在下面的例子中我们可以计算age是否是小于等于18岁等。

如下所示:Person类通过传入其内部类Build的实例进行构造,而Build提供对其所有参数的访问器,用户可以根据需要,自由组合。

public class Person  {
    private int ID;
    private int age;
    private String name;
    private int hight;
    private int weight;
    private Callback callback;

    interface Callback {
        void callback();
    }

    private Person(Builder builder) {
        this.ID = builder.ID;
        this.age = builder.age;
        this.name = builder.name;
        this.hight = builder.hight;
        this.weight = builder.weight;
        this.callback = builder.callback;
    }

    public static class Builder {
        private int ID;
        private int age;
        private String name;
        private int hight;
        private int weight;
        private Callback callback;

        public Builder setID(int ID) {
            this.ID = ID;
            return this;
        }

        public Builder setAge(int age) {
            this.age = age;
            return this;
        }

        public Builder setName(String name) {
            this.name = name;
            return this;
        }

        public Builder setHight(int hight) {
            this.hight = hight;
            return this;
        }

        public Builder setWeight(int weight) {
            this.weight = weight;
            return this;
        }

        public Builder setCallback(Callback callback) {
            this.callback = callback;
            return this;
        }

        public Person build() {
            return new Person(this);
        }
    }
}
Person.Builder buider = new Person.Builder();
buider.setAge(13);
buider.setName("jack");
Person Tom = buider.build();
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值