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);
        }
    }

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

  • 相关阅读:
    manacher算法笔记
    2019qbxtCSP-S2 模拟题1
    三元环计数
    踩坑日记
    我的Ubuntu16.04 安装配置
    SLAM14讲项目在 mac 上无法正常运行
    平面最近点对的算法实现
    hiho 1996
    【游记】NOIP2018 退役滚粗记
    铁板铮铮♂+习题集
  • 原文地址:https://www.cnblogs.com/wangyang108/p/5830315.html
Copyright © 2011-2022 走看看