设计模式(一)创建者模式

来源:互联网 发布:人机界面编程难不难 编辑:程序博客网 时间:2024/06/14 16:17

当我们创建对象的时候,往往会使用构造方法进行创建,但是如果这个对象很复杂,在创建过程中有很多属性需要赋值,这是你是不是会被构造方法中的参数搞得晕头转向。这时候使用创建者模式,可以优雅的解决这个问题。
创建者模式就是把对象的创建与对象的设计进行分离。不关心如何创建对象,只使用创建器去设计自己的对象。
代码举例:

package com.designPattern.builder;/** *  我是复杂对象 */public class ComplexBean {    private String name ;    private String age ;    private String job ;    public ComplexBean() {    }    /**     * 这里私有构造方法,防止外部调用,只能使用制定的创建器来创建对象     * ComplexBeanBuilder     * @param complexBean     */    private  ComplexBean(ComplexBean complexBean) {        this.name = complexBean.name;        this.age = complexBean.age;        this.job = complexBean.job;    }    /**     * get set 方法     */    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getAge() {        return age;    }    public void setAge(String age) {        this.age = age;    }    public String getJob() {        return job;    }    public void setJob(String job) {        this.job = job;    }    /**     * 创建器内部类 这里为什么是内部类?     * 其实外部类也是可以的,只不过外部类,由于存在成员变量     * complexBean  因此有线程安全问题。     */    public   static  class ComplexBeanBuilder{        private ComplexBean complexBean ;        public ComplexBeanBuilder() {            //这里也可以使用方法 初始化对象。            // 比如 在类中新加方法 create(){             //this.complexBean = new ComplexBean();}            this.complexBean = new ComplexBean();        }        /**        *返回 当前对象,this代表 这个内部类的对象。        */        public  ComplexBeanBuilder setName(String name ){            complexBean.name = name;            return this ;        }        public  ComplexBeanBuilder setAge(String job ){            complexBean.job = job;            return this ;        }        public  ComplexBeanBuilder setJob(String job ){            complexBean.job = job;            return this ;        }        /**        *最终产生对象        */        public ComplexBean build(){           return  new  ComplexBean(complexBean);        }    }    /**    *方便测试    */    @Override    public String toString() {        return "ComplexBean{" +                "name='" + name + '\'' +                ", age='" + age + '\'' +                ", job='" + job + '\'' +                '}';    }}测试:package com.designPattern.builder;public class Test {    public static void main(String [] args){        //内部类的方式        ComplexBean complexBean = new ComplexBean.ComplexBeanBuilder()           //通过创建器进行创建对象,非常明确每个参数,避免复杂代码                    .setAge("15").setJob("progremer").setName("TOM").build();    System.out.println(complexBean );    }}
原创粉丝点击