zoukankan      html  css  js  c++  java
  • [设计模式] 单例模式

      1.什么是单例模式?

        保证类仅有一只示例,并提供一个访问它的全局访问点。

      2.单例模式类图

        

      3.java 实现

        a.饿汉模式

          

    package com.jerry.pattern.singleton;
    /**
     * 单例模式
     * 饿汉子模式
     * @author Jerry
     *
     * 2014-1-23 下午01:50:25
     */
    public class HungrySingleton {
        private static HungrySingleton singleton = new HungrySingleton();
        
        private HungrySingleton() {}
        
        public static HungrySingleton getInstance() {
            return singleton;
        }
    }

        b.懒汉模式

     

    package com.jerry.pattern.singleton;
    
    import java.util.concurrent.locks.ReentrantLock;
    
    /**
     * 单例模式
     * 懒汉模式
     * @author Jerry
     *
     * 2014-1-23 下午01:51:46
     */
    public class LazySingleton {
        private static LazySingleton singleton = null;
        private static ReentrantLock lock = new ReentrantLock();
        private LazySingleton() {}
        
        public static LazySingleton getInstance() {
            if (singleton == null) {
               try {
                   lock.lock();
                   if (singleton == null) {
                       singleton = new LazySingleton();
                   }
               } finally {
                // TODO: handle exception
                   lock.unlock();
               }
            }
            return singleton;
        }
    }

        c.内部类模式

    package com.jerry.pattern.singleton;
    /**
     * 内部类
     * @author Jerry
     *
     * 2014-1-27 上午10:44:33
     */
    public class InnerClassSingleton {
        private static InnerClassSingleton singleton;
        
        private InnerClassSingleton() {
        }
        
        public InnerClassSingleton getInstance() {
            if (singleton == null) {
                singleton = InnerClass.singleton;
            }
            return singleton;
        }
        
        private static class InnerClass {
            private static InnerClassSingleton singleton = new InnerClassSingleton();
        }
    }

        d.枚举模式

    package com.jerry.pattern.singleton;
    /**
     * 枚举单例
     * @author Jerry
     *
     * 2014-1-27 上午10:49:51
     */
    public enum EnumSingleton {
        /**
         * 定义一个枚举元素
         */
        uniqueSingleton;
        
        public void singletonOperation() {
        }  
    }
  • 相关阅读:
    [osg][原]自定义osgGA漫游器
    [osg]osg窗口显示和单屏幕显示
    sql中去除重复的数据 select distinct * from table
    Microsoft VBScript 运行时错误 错误 800a005e 无效使用 Null: Replace
    如何解决Access操作或事件已被禁用模式阻止
    sql 中 '' 与 null 的区别
    IsNull、rs、sum
    Access与SQL中的IsNull(),IS NULL的区别
    ASP将Table导出Excel
    ASP如何将table导出EXCEL表格
  • 原文地址:https://www.cnblogs.com/jerry19890622/p/3530566.html
Copyright © 2011-2022 走看看