zoukankan      html  css  js  c++  java
  • 单例模式的另外三种方法

    单例模式的另外三种方法

    静态内部类:

    public class MyObject {
    
        private static class MyObjectHandler{
            private static MyObject myObject = new MyObject();
        }
    
        private MyObject() {
    
        }
    
        public static MyObject getInstance() {
            return MyObjectHandler.myObject;
        }
    }

    静态内部类反序列化问题:

    import java.io.ObjectStreamException;
    import java.io.Serializable;
    
    import com.stono.thread2.ThreadPrint;
    
    public class MyObject implements Serializable {
    
        private static final long serialVersionUID = -3968427143706472470L;
    
        private static class MyObjectHandler{
            private static final MyObject myObject = new MyObject();
        }
    
        private MyObject() {
    
        }
    
        public static MyObject getInstance() {
            return MyObjectHandler.myObject;
        }
        
        protected Object readResolve() throws ObjectStreamException{
            ThreadPrint.print("调用了readResolve方法");
            return MyObjectHandler.myObject;
        }
    }

    static代码块:

    public class MyObject {
        private static MyObject myObject =  null;
    
        private MyObject() {
    
        }
        static {
            myObject = new MyObject();
        }
    
        public static MyObject getInstance() {
            return myObject;
        }
    }

    enum枚举类型:

    import java.util.Date;
    
    import com.stono.thread2.ThreadPrint;
    
    public enum MyObject {
    
        connectionFactory;
        private Date connection;
        private MyObject() {
            try {
                ThreadPrint.print("调用了MyObject的构造函数");
                connection = new Date();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        public Date getConnection() {
            return connection;
        }
    }

    单一职责:

    import java.util.Date;
    
    import com.stono.thread2.ThreadPrint;
    
    public class MyObject {
    
        public enum MyEnumSingleton{
            connectionFactory;
            private Date connection;
            private MyEnumSingleton() {
                try {
                    ThreadPrint.print("调用了MyObject的构造函数");
                    connection = new Date();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            public Date getConnection() {
                return connection;
            }
        }
        
        public static Date getConnection() {
            return MyEnumSingleton.connectionFactory.getConnection();
        }
    }
  • 相关阅读:
    mac下面xcode+ndk7配置cocos2dx & box2d的跨ios和android平台的游戏教程
    如何在macox下面配置集成ios和android游戏教程
    Cocos2d-x win7 + vs2010 配置图文详解(亲测)
    cocos2d-x学习资源汇总(持续更新。。。)
    我常用的iphone开发学习网站[原创]
    「C」关键字、标识符、注释、内存分析、数据、常量、变量
    「Foundation」集合
    「Foundation」字符串
    「Foundation」结构体
    「OC」block 和 protocol
  • 原文地址:https://www.cnblogs.com/stono/p/8458194.html
Copyright © 2011-2022 走看看