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

  • 相关阅读:
    java包和jar包
    java异常总结
    java异常练习2
    java中的异常处理机制_函数覆盖时的异常特点
    React(三)TableBar,ToDoList,Redux案例
    React(二)组件通信
    React(二)组件通信
    React(一)起步
    React(一)起步
    Vue(二)进阶
  • 原文地址:https://www.cnblogs.com/zjting/p/11394362.html
Copyright © 2011-2022 走看看