建造者模式Builder

建造者模式Builder,大家应该不陌生,在ImageLoader中使用的就是Builder模式,这里就简单的为大家介绍一下Builder模式,如有不同见解,请提出功能学习,谢谢!

一、定义

          将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示


二、使用场景

          

         1、相同的方法,不同的执行顺序,产生不同的事件结果时
          2、多个部件或零件,都可以装配到一个对象,但是产生的运行结果又不相同时
          3、产品类非常复杂,或者产品类中的调用顺序不同产生不同的作用,这个时候使用建造者模式非常适合
          4、当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值时

三、简单的User实例

        1、封装Users实例

public  class Users {
    private final String mFirstName;//必选
    private final String mLastName;//必选
    private final String mGender;//可选
    private final int mAge;//可选
    private final String mPhoneNumber;//可选
    private String mContry;

    Users(UserBuilder builder) {
        mFirstName = builder.firstName;
        mLastName = builder.lastName;
        mGender = builder.gender;
        mAge = builder.age;
        mPhoneNumber = builder.phoneNumber;
        mContry = builder.contry;
    }


    public String getFirstName() {
        return mFirstName;
    }

    public String getLastName() {
        return mLastName;
    }


    public String getGender() {
        return mGender;
    }

    public int getAge() {
        return mAge;
    }

    public String getPhoneNumber() {
        return mPhoneNumber;
    }

    public String getContry() {
        return mContry;
    }

    public static class UserBuilder {
        private final String firstName;//必选
        private final String lastName;//必选
        private String gender;//可选
        private int age;//可选
        private String phoneNumber;//可选
        private String contry;//可选


        public UserBuilder(String firstName, String lastName) {
            this.firstName = firstName;
            this.lastName = lastName;
        }

        public UserBuilder gender(String gender) {
            this.gender = gender;
            return this;
        }

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

        public UserBuilder phoneNumber(String phoneNumber) {
            this.phoneNumber = phoneNumber;
            return this;
        }

        //设置好的默认的值,用户只需要设置是否添加这个默认值
        public UserBuilder contry(){
            this.contry = "中国";
            return this;
        }

        public Users build() {
            return new Users(this);
        }
    }
}

      2、代码中使用

Users build = new Users.UserBuilder("", "")
        .age(18)
        .gender("man")
        .phoneNumber("183551")
        .contry()
        .setOnClick("确定", new CallBack() {
            @Override
            public void callBack() {
                System.out.println("我是回调.........");
            }
        })
        .build();
list.add(build);

Users.UserBuilder builds = new Users.UserBuilder("", "");
builds.age(30);
builds.gender("woman");
builds.phoneNumber("123456");
builds.contry();
builds.build();

list.add(builds.build());

       

优点:
          1、良好的封装性,使用建造者模式可以使客户端不必知道产品内部组成细节
          2、建造者独立,容易扩展

缺点:
           会产生多余的Builder对象,消耗内存

以上是Builder模式的简单介绍及使用,欢迎评论大笑


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值