zoukankan      html  css  js  c++  java
  • 三、singleton(单例化)一个对象的几种方法

    方案一:私有化构造器,通过static final域

    @Test
        public void test13() {
            A215 a=A215.a;
            A215 b=A215.a;
            System.out.println(a==b);//true
        }
    
    class A215{
        public static final A215 a=new A215();
        private A215(){}
    }

    方案二:私有化构造器,私有化static final域通过工厂模式来实现

    @Test
        public void test20() {
            A211 a1=A211.getA211();
            A211 a2=A211.getA211();
            System.out.println(a1==a2);//true
        }
    
    class A211{
        private static final A211 a=new A211();
        public static A211 getA211(){
            return a;
        }
    }

    方案三,通过Enum来实现

    @Test
        public void test12() {
            A216 a217 = A216.A217;
            A216 a218 = A216.A217;
            System.out.println(a217==a218);//true
        }
    }
    enum A216{
        A217;
        private A217 a=null;
        private A216(){
            a=new A217();
            a.name="wangyang";
        }
        public A217 getA217(){
            return a;
        }
        
    }
    class A217{
        public String name;
        public void hello(){
            System.out.println("hello "+name);
        }
    }

    其实对于第一种,和第二种方法。通过反射或者序列化可以打破其单例的实现,但第三种无偿地提供了序列化机制,绝对防止多次实例化,即使是在面对复杂的序列化或者反射攻击的时候

  • 相关阅读:
    去除inline-block出现间距的几种方法
    vscode插件和快捷键
    es6三个点运算符
    jq返回顶部
    jq版轮播图
    js动态操作DOM
    js中的闭包
    es6之箭头函数
    in和hasOwnProperty的区别
    改变this指向的三种方法
  • 原文地址:https://www.cnblogs.com/wangyang108/p/5830315.html
Copyright © 2011-2022 走看看