• 单例模式


    懒汉:

    public class Singleton{
          
           // 因为这个变量要在静态方法中使用,所以需要加上static修饰  
           private static Singleton instance = null;
    
           //私有化构造器,好在内部控制创建实例的数目
           private Singleton(){
       
           }  
     
           //这个方法要定义成类方法
           public static Singleton getInstance(){
              
                 if( instance == null ){
                         instance = new Singleton();
                 }        
                 return instance;
      
           }
    
    }
    

    饿汉

    public class Singleton {
    
            private static Singleton instance = new Singleton();
    
            pirvate Singleton(){
    
           }  
    
           public static Singleton getInstance(){
                    
                 return instance;
    
           }      
    
    
    
    }
    

      单例模式中“懒汉”实现了缓存的思想

    在java中缓存的基本实现:

    public class JavaCache {
    
    /**
    
    * 缓存数据的容器,定义成Map是方便访问,直接根据Key就可以获取Value了 key选用String是为了简单
    
    */
    
    private Map<String, Object> map = new HashMap<String, Object>();
    
    
    
    
    
    /**
    
    * 从缓存中获取值
    
    * 
    
    * @param key
    
    *            设置时候的key值
    
    * @return key对应的Value值
    
    */
    
    public Object getValue(String key) {
    
    // 先从缓存里面取值
    
    Object obj = map.get(key);
    
    // 判断缓存里面是否有值
    
    if (obj == null) {
    
            // 如果没有,那么就去获取相应的数据,比如读取数据库或者文件
    
           // 这里只是演示,所以直接写个假的值
    
            obj = key + ",value";
    
          // 把获取的值设置回到缓存里面
    
            map.put(key, obj);
    
        }
    
        // 如果有值了,就直接返回使用
    
        return obj;
    
       }
    
    }
    

      利用缓存来实现单例模式

    public class Singleton{
    
             //定义一个默认的key值,用来表示在缓存中的存放
            private  final static  String DFAULT_KEY = "one";
           
           //缓存实例的容器
           private static Map<String , Singleton> map = new HashMap<String,Singleton<();
    
    
           private Singleton(){
    
          }
      
          public class Singleton getInstance(){
             
                   //先从缓存中获取
                   Singleton insatce = map.get(DFAULT_KEY);
               
                   if( instance ==  null ){
                             
                              instance = new Singleton();
                              map.put(DFAULT_KEY , instance);
                   }
         
          }
    
    }
    

    线程安全:

             1 不在同步的懒汉式线程不安全的

             2 饿汉是安全的

    改造:

           同时实现延迟加载也实现线程安全

        基础知识:

      

                解决方案的思路:

             实现:

       

    public class Singleton{
    
              //类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例没有绑定关系,而且只有别调用到的时候才会装载,从而实现了延迟加载
             private static class SingletonHolder{
                    //静态初始化器,由JVM来保证线程安全
                    private static Singleton isntance = new Singleton();                               
    
            }  
    
             private Singleton(){
            
             }
           
             public static Singleton getInstance(){
               
                    return SingletonHolder.instance;
             
             }          
    
    
    }
    

      

  • 相关阅读:
    Ueditor之SAE移植
    SAE flask及其扩展 bug指南
    SAE 安装未包含的第三方依赖包
    Bootstrap 和 LESS
    Device.js——检测设备平台、操作系统的Javascript 库
    Flask 富文本编辑器
    DDoS攻击
    WPF之数据绑定
    参数测试
    总结 一下UML 类图的关系
  • 原文地址:https://www.cnblogs.com/a757956132/p/4527319.html
Copyright © 2020-2023  润新知