建造者模式Builder

来源:互联网 发布:h3c 查看当前端口配置 编辑:程序博客网 时间:2024/06/03 17:45

建造者模式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模式的简单介绍及使用,欢迎评论大笑


原创粉丝点击