单例模式分析

打印 上一主题 下一主题

主题 1054|帖子 1054|积分 3166

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.什么是单例模式

一种常用的软件设计模式,它确保一个类仅有一个实例,并提供一个全局访问点来获取这个实例。
2.单例模式存在缘故原由

(1)确保一个类仅有一个实例,并提供一个全局访问点来获取这个实例
(2)用于控制资源访问、管理共享资源(如配置文件、数据库连接等)或实现一个全局服务等多种场景。
3.怎样实现一个单例模式

(1)私有构造方法
防止外部通过new关键字创建类的实例。
(2)私有静态实例
在类内部创建一个类的唯一实例,并将其声明为静态变量。
(3)公共静态方法
提供一个公共的静态方法,返回类的唯一实例,并在必要时创建这个实例。
4.具体方案:

懒汉式(线程不安全)

  1. public class Singleton {  
  2.     private static Singleton instance;  
  3.   
  4.     private Singleton() {}  
  5.   
  6.     public static Singleton getInstance() {  
  7.         if (instance == null) {  
  8.             instance = new Singleton();  
  9.         }  
  10.         return instance;  
  11.     }  
  12. }
复制代码
懒汉式(线程安全)

  1. public class Singleton {  
  2.     private static Singleton instance;  
  3.   
  4.     private Singleton() {}  
  5.   
  6.     public static synchronized Singleton getInstance() {  
  7.         if (instance == null) {  
  8.             instance = new Singleton();  
  9.         }  
  10.         return instance;  
  11.     }  
  12. }
复制代码
双重检查锁定(Double-Checked Locking)

  1. public class Singleton {  
  2.     // volatile关键字确保多线程的可见性和禁止指令重排序  
  3.     private static volatile Singleton instance;  
  4.   
  5.     private Singleton() {}  
  6.   
  7.     public static Singleton getInstance() {  
  8.         if (instance == null) {  
  9.             synchronized (Singleton.class) {  
  10.                 if (instance == null) {  
  11.                     instance = new Singleton();  
  12.                 }  
  13.             }  
  14.         }  
  15.         return instance;  
  16.     }  
  17. }
复制代码
静态内部类

  1. public class Singleton {  
  2.     private Singleton() {}  
  3.   
  4.     private static class SingletonHolder {  
  5.         private static final Singleton INSTANCE = new Singleton();  
  6.     }  
  7.   
  8.     public static final Singleton getInstance() {  
  9.         return SingletonHolder.INSTANCE;  
  10.     }  
  11. }
复制代码
枚举

  1. public enum Singleton {  
  2.     INSTANCE;  
  3.   
  4.     public void whateverMethod() {  
  5.     }  
  6. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王國慶

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表