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

      单例模式(Singleton Pattern),顾名思义,就是一个类只有一个实例,并且对整个系统提供这个实例
     
    demo1:
     
    public class Singleton {
        private static final Singleton singleton = new Singleton();
        //限制产生多个对象
        private Singleton(){
        }
        //通过该方法获得实例对象
        public static Singleton getSingleton(){
            return singleton;
        }
        //类中其他方法,尽量是static
        public static void doSomething(){
        }
    }
            
    

    有时会把demo1称为饿汉式单例,还有一种是懒汉式单例,也就是需要的时候才创建,仅且只有一个实例,代码如下

    demo2:

    public class Singleton {
          private static final Singleton singleton =null;
          private Singleton(){
          }
         //获得对象
         public static Singleton getSingleton(){
             if(singleton == null){
               singleton = new Singleton();
               }
          return singleton  ;
      }
    
    }
    

     

    应该能看出来demo1与demo2的区别,应该也能看出来demo2存在着线程安全的问题,因此对demo2进一步完善,可以加上Synchronized在方法上,或者在代码块上进行同步安全,代码如下:

    public class Singleton {
          private static final Singleton singleton =null;
          private Singleton(){
          }
         //获得对象
         public static  synchronized Singleton getSingleton(){
             if(singleton == null){
               singleton = new Singleton();
               }
          return singleton  ;
      }
    
    }

     
    单例模式的好处:
      1,减少内存的开销
      2,减少性能的开销
      3,避免对资源的多重占用
      4,单例模式可以在系统设置全局的访问点,优化和共享资源访问,例如可以设计一个单例类,负责所有数据表的映射处理
     
    缺点:
      1,没有接口,扩展性难
      2,违反单一职责原则
      3,测试时候需要等对象创建完成
     
    使用场景:
      一个类只有一个对象,对于系统中要求也是
      1,要求生成唯一序列号的环境,
      2,在整个项目中需要一个共享访问点或共享数据。单例则共享对象,可以做到数据的共享,但是要保证线程的安全问题
      3,当创建的对象消耗太大时,可以使用单例模式
      4,系统中使用的是大量的静态的资源的时候可以使用单例
     
     
                                                谢谢大家 ^_^
  • 相关阅读:
    Interleaving String
    Binary Tree Inorder Traversal
    Unique Binary Search Trees II
    Unique Binary Search Trees
    .Net(C#)访问X509证书加密的Webservice(六)--WSE 2来订制web service
    UpdatePanel控件
    在InfoPath中如何获取user profle
    Sharepoint Webpart 自定义属性
    Sharepoint 服务端对象模型增加项到文档库
    从Sharepoint的List中获取不重复的item
  • 原文地址:https://www.cnblogs.com/gdhzdbh/p/9466656.html
Copyright © 2011-2022 走看看