zoukankan      html  css  js  c++  java
  • Java Singleton的3种实现方式

    1、通过静态成员字段来实例化

    public class Elvis {
        /**
         * 通过final的静态成员字段来调用私有的构造函数实例化对象
         */
        public static final Elvis INSTANCE = new Elvis();
    
        /**
         * 私有构造函数,防止在类以外被实例化
         */
        private Elvis() {
        }
    
        public void leaveTheBuilding() {
            System.out.println("Leave the building...");
        }
    
        public static void main(String[] args) {
            Elvis.INSTANCE.leaveTheBuilding();
        }
    }

    2、通过公有的静态工厂方法

    public class Elvis {
        /**
         * 把静态成员字段设置为私有的
         */
        private static final Elvis INSTANCE = new Elvis();
    
        /**
         * 私有构造函数,防止在类以外被实例化
         */
        private Elvis() {
        }
    
        /**
         * 通过公有的静态工厂方法导出Single实例
         * @return Singleton实例
         */
        public Elvis getInstance(){
            return INSTANCE;
        }
    
        public void leaveTheBuilding() {
            System.out.println("Leave the building...");
        }
    
        public static void main(String[] args) {
            Elvis.INSTANCE.leaveTheBuilding();
        }
    }

    3、通过枚举来返回,这种方式更加简洁,无偿提供了序列化机制,绝对防止多次实例化,即使在面对多次序列化和范序列化攻击的时候。虽然这种方法没有被广泛采用,但这种方式已经成为实现Singleton的最佳方法。

    public class Elvis {
        /**
         * 把静态成员字段设置为私有的
         */
        private static final Elvis INSTANCE = new Elvis();
    
        /**
         * 私有构造函数,防止在类以外被实例化
         */
        private Elvis() {
        }
    
        /**
         * 通过包含单个元素的枚举类型来实现,推荐的方式(从Java 1.5 发行版起)
         */
        public enum Elvis1 {
            INSTANCE;
    
            public void leaveTheBuilding() {
                System.out.println("Leave the building...");
            }
        }
    
        public static void main(String[] args) {
            Elvis1.INSTANCE.leaveTheBuilding();
        }
    }

  • 相关阅读:
    Android和PHP开发最佳实践
    python3+pyqt5 +eric5安装配置
    用Python为iOS和Android写跨平台的应用
    No compatible targets were found Do you wish to a add new Android Virtual Device ?
    doc命令大全(详细版)
    安装Qt5.9
    ADT Bundle下载和安装
    阶段性学习内容
    DDMS files not found
    五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程
  • 原文地址:https://www.cnblogs.com/frankyou/p/7250155.html
Copyright © 2011-2022 走看看