博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
构造者模式
阅读量:5116 次
发布时间:2019-06-13

本文共 1340 字,大约阅读时间需要 4 分钟。

你是否打过以下代码:

public class Animal{
private String name; private String breed; private String gender; private int weight; public Animal(String name, String breed) { this.name = name; this.breed = breed; } public Animal(String name, String breed,String gender,int weight) { this.name = name; this.breed = breed; this.gender=gender; this.weight=weight; } } 上述代码,导致了在构造过程中JavaBean可能处于不一致的状态,也就是说实例化对象本该是一气呵成,但现在却分割成了两大步,这会导致它线程不安全,进一步引发不可预知的后果。 Effective+Java作者joshua bloch推荐利用"Builder"模式(构造者模式),其核心就是不直接生成想要的对象,而是让客户端利用所有必要的参数调用构造器(或者静态工厂), 得到一个builder对象,再调用类似setter的方法设置相关可选参数。 代码如下: public class Animal{ private String name; private String breed; private String gender; private int weight; public static class Builder { private String name; private String breed; private String gender; private int weight; public Builder(String name, int weight){ this.name=name; this.weight=weight; } public Builder gender(String gender){ this.gender=gender; return this; } public Builder breed(String breed){ this.breed=breed; return this; } public Animal build(){ return new Animal(this); } } private Animal(Builder builder){ this.name=builder.name; this.breed=builder.breed; this.gender=builder.gender; this.weight=builder.weight; } }  调用: Animal animal=new Animal.Builder("Tom",10).breed("Cat").build();

 

 

 

 

 

转载于:https://www.cnblogs.com/neowu/p/10742355.html

你可能感兴趣的文章
Linux命令应用大词典-第4章 目录和文件操作
查看>>
A + B Problem II
查看>>
app与服务端通信时如何进行消息校验
查看>>
AS3优化性能笔记二
查看>>
wpf combobox
查看>>
#小练习 SGMLParser练习 分类: HTMLParser ...
查看>>
Insert语句对于三种类型的内表的不同效果
查看>>
qml:基本知识记录
查看>>
时间戳
查看>>
算法入门(一) 排序
查看>>
第十一次作业
查看>>
如何实现Servlet的单线程模式
查看>>
Java学习笔记八
查看>>
mybatis分页插件PagePlugin
查看>>
Sizeof与Strlen的区别与联系
查看>>
JAVA协变返回类型
查看>>
Windows 下,使用 Pycharm + Anaconda(NumPy,SciPy 等集成包)的环境配置
查看>>
[SmartTV_Samsung]Samsung Smart TV 开发环境搭建
查看>>
Ruby学习笔记(二)——从管道读取数据
查看>>
Word Capitalization
查看>>