zoukankan      html  css  js  c++  java
  • 设计模式之Builder模式

    场景引入:

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

    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实例的!

  • 相关阅读:
    MyEclipse 启动报错:'Building workspace' has encountered a problem解决方法
    MyEclipse快捷键大全
    Maven学习 (四) 使用Nexus搭建Maven私服
    PHP 语法
    PHP 在Win下的安装
    PHP 简介
    【CMS】安装CMS
    【CMS】DedeCMS Error: (PHP 5.3 and above) Please set 'request_order' ini value to include C,G and P (recommended: 'CGP') in php.ini
    mysqladmin: connect to server at 'localhost' failed
    解压版MySQL安装后初始化root密码
  • 原文地址:https://www.cnblogs.com/zjting/p/11394362.html
Copyright © 2011-2022 走看看