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

  • 相关阅读:
    vue-router的钩子函数
    vue中父组件和子组件的生命周期钩子
    图片的按需加载代码实现
    关于DNS优化的策略
    在url中输入地址到页面呈现发生了什么
    vue-router的组件传值
    微信小程序wx_request封装
    vue生命周期
    vue生命周期的讨论&容易忽略的知识
    【Vue】---{__ob__: Observer}
  • 原文地址:https://www.cnblogs.com/zjting/p/11394362.html
Copyright © 2011-2022 走看看