设计模式之Builder建造者模式
2017-06-20 10:16
543 查看
Builder模式:
主要解决构造函数参数过多的问题;
起因:对象有多个全局变量;
解决方法:
1、多个构造方法,第一个传入的都是必传的,后面的构造方法依次加入可选参数;类似于自定义view的构造方法;
缺点:可读性差;调用麻烦,比如两个必选参数,而想要多传第四个参数时,还得先给第三个参数设置默认值;
2、空构造方法,为每一个属性设置setter和getter;
缺点
:对象会产生不一致的状态,必须将所有set方法全调用完成之后才行;类是可变的,不可变类的好处都消失了。
Builder:
步骤:
1.类的属性都是不可变的,用final修饰,在构造方法中设置了值并对外只提供getter方法;
2.私有化构造方法,参数为内部静态类Bulider;
3.内部静态类Builder,构造方法中参数只接收必选的;对于可选参数,分别通过返回值为Builder对象的各方法设置;
4.最后在Builder类中构建返回值为外部User对象的build方法来new出对象;
优点:解决了前两种方法的缺点;链式调用可读性更佳;Builder内部类构造方法只接收必传参数,且用final修饰;
缺点:产生多余的Builder对象,消耗内存;而Builder通常用static修饰,静态类在没有load进JVM前,所有属性方法均不在内存中;
注意:由于Builder是非线程安全的,所以要在Builder内部类中检查一个变量的合法性,必须等到对象创建完成后再检查;
实例:AlertDialog;
参考:http://www.jianshu.com/p/e2a2fe3555b9
主要解决构造函数参数过多的问题;
起因:对象有多个全局变量;
解决方法:
1、多个构造方法,第一个传入的都是必传的,后面的构造方法依次加入可选参数;类似于自定义view的构造方法;
缺点:可读性差;调用麻烦,比如两个必选参数,而想要多传第四个参数时,还得先给第三个参数设置默认值;
2、空构造方法,为每一个属性设置setter和getter;
缺点
:对象会产生不一致的状态,必须将所有set方法全调用完成之后才行;类是可变的,不可变类的好处都消失了。
Builder:
步骤:
1.类的属性都是不可变的,用final修饰,在构造方法中设置了值并对外只提供getter方法;
2.私有化构造方法,参数为内部静态类Bulider;
3.内部静态类Builder,构造方法中参数只接收必选的;对于可选参数,分别通过返回值为Builder对象的各方法设置;
4.最后在Builder类中构建返回值为外部User对象的build方法来new出对象;
优点:解决了前两种方法的缺点;链式调用可读性更佳;Builder内部类构造方法只接收必传参数,且用final修饰;
缺点:产生多余的Builder对象,消耗内存;而Builder通常用static修饰,静态类在没有load进JVM前,所有属性方法均不在内存中;
注意:由于Builder是非线程安全的,所以要在Builder内部类中检查一个变量的合法性,必须等到对象创建完成后再检查;
实例:AlertDialog;
参考:http://www.jianshu.com/p/e2a2fe3555b9
相关文章推荐
- 我的设计模式之旅(4)――生成器(建造者)模式Builder
- C#设计模式之建造者(Builder)模式示例源代码
- Net设计模式实例之建造者模式(Builder Pattern)(2)
- .NET设计模式(4):建造者模式(Builder Pattern)
- Java设计模式-----Builder建造者模式
- 设计模式 Design Parttern ——建造者模式 Builder
- C#设计模式之建造者(Builder)模式示例源代码
- 设计模式读书笔记之建造者模式(Builder)
- 一天一个设计模式之建造者模式(Builder)
- .NET设计模式(4):建造者模式(Builder Pattern)
- .NET设计模式(4):建造者模式(Builder Pattern)
- .NET设计模式(4):建造者模式(Builder Pattern)
- .Net设计模式学习笔记(四):建造者模式(Builder Pattern)
- C#设计模式之建造者(Builder)模式示例源代码
- .NET设计模式(4):建造者模式(Builder Pattern)
- 设计模式学习笔记(十二)—Builder建造者模式
- .NET设计模式(4):建造者模式(Builder Pattern)
- Net设计模式实例之建造者模式(Builder Pattern)
- 设计模式——建造者模式【Builder Pattern】
- C#设计模式之建造者(Builder)模式示例源代码(外摘)