场景引入:

  一个类,如果有多个属性时,在创建对象,如何对属性进行赋值呢?

1.通过构造器赋值,这种方案优点时一次性赋值完成,但是多种属性的组合,导致构造器会非常多。

2.通过setter方法赋值,方案优点代码直观简洁,缺点会出现javabean难一致的情况(多线程情况下);

今天,我们学习建造者模式,用一种全新的方式来创建安全的一致的对象。

代码实现:

class BeanFactory{

    private String userName;

    private String passWord;

    private String url;

    private int port;

    public String toString(){
return "{userName="+userName+",passWord="+passWord+",url="+url+",port="+port+"}";
} public BeanFactory(BeanFactoryBuilder builder){
this.userName = builder.userName;
this.passWord = builder.passWord;
this.url = builder.url;
this.port = builder.port;
} static class BeanFactoryBuilder{
private String userName; private String passWord; private String url; private int port; public BeanFactoryBuilder setUserName(String userName){
this.userName= userName;
return this;
}
public BeanFactoryBuilder setPassWord(String passWord){
this.passWord= passWord;
return this;
}
public BeanFactoryBuilder setUrl(String url){
this.url= url;
return this;
}
public BeanFactoryBuilder setPort(int port){
this.port= port;
return this;
} public BeanFactory build(){
return new BeanFactory(this);
}
}
}

测试类:

//测试类
public class Test{
public static void main(String[] args){
BeanFactory factory = new BeanFactory.BeanFactoryBuilder()
.setUserName("lucy").
setPassWord("123456").
setUrl("www.baidu.com").
setPort(8080).
build();
System.out.println(factory);
}
}

其实,在Mybatis中的SqlSessionFactoryBuilder就是通过这种方式来生成SqlSessionFactory实例的!

最新文章

  1. 使用DFA做文本编辑器的自动提示
  2. Java 关键字static final使用总结
  3. CentOS下源码安装MySQL
  4. Universal Asynchronous Receiver/Transmitter
  5. Linux管道通信
  6. 使用Jax-rs 开发RESTfull API 入门
  7. Contest Balloons
  8. [补档]暑假集训D2总结
  9. redis的sentinel主从切换(failover)与Jedis线程池自动重连
  10. java 冒泡排序与选择排序
  11. TCP连接之未连接队列的理解[转]
  12. Android + https 实现 文件上传
  13. 【sparkSQL】SparkSession的认识
  14. Django学习教程
  15. java链接JDBC中的?问题
  16. 一本通1635【例 5】Strange Way to Express Integers
  17. MikroTik RouterOS虚拟机/实体机安装方法
  18. 原生js实现三级复选框
  19. Shell 字符串处理、获取文件名和后缀名
  20. LeetCode 404. Sum of Left Leaves (C++)

热门文章

  1. C++基础练习1
  2. 《STM32CubeMX配置STM32H743XI工程》第一讲《初始化UART,重定义printf函数,点亮一个LED灯》
  3. 使用RestTemplate,显示请求信息,响应信息
  4. python数据更新
  5. Flutter——Dart Extension扩展方法的使用
  6. 第9.8节 Python使用writelines函数写入文件内容
  7. PyQt(Python+Qt)学习随笔:Model中项的标记flags取值及枚举类型Qt.ItemFlag
  8. Azure Cosmos DB (五) .Net Core 控制台应用
  9. Jmeter(三十二) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy5(详解教程)
  10. 一个不倒翁App