设计模式---单例模式 (转)

简介: 看别人写的设计模式 觉得很好。  引用别人的 自己就不造轮子了。。。。。  转载  http://liuqing9382.iteye.com/blog/1441661 单例模式: 三个要点: 1.某个类只能有一个实例。

 看别人写的设计模式 觉得很好。

 引用别人的 自己就不造轮子了。。。。。

 转载  http://liuqing9382.iteye.com/blog/1441661

单例模式:
三个要点:
1.某个类只能有一个实例。
2.它必须自行创建这个实例;
3.它必须自行向外提供这个实例。

饿汉式:

 

public class Singleton{   
  
   private static Singleton singleton = new Singleton ();   
  
   private Singleton (){}   
  
   public Singleton getInstance(){   
  
     return singletion;   
  
   }   
  
}   

 优点:

    1.线程安全
    2.在类加载的同时已经创建好一个静态对象,调用时反应速度快
缺点:
      资源效率不高,可能getInstance()永远不会执行到,但执行该类的其他静态方法或者加载了该类(class.forName),那么这个实例仍然初始化 
    

懒汉式: (懒加载的思想,用到才会初始化实例)

public class Singleton{   
  
private static Singleton singleton = null;   
  
public static synchronized Singleton getInstance(){   
  
if(singleton==null){   
  
singleton = new Singleton();   
  
}   
  
return singleton;   
  
}   
  
}   

 优点:
资源利用率高,不执行getInstance()就不会被实例,可以执行该类的其他静态方法
缺点:
    第一次加载时不够快,多线程使用不必要的同步开销大
比较:
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变。
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的,
推荐使用第一种
  假设多线程访问的时候,线程1在在new Instence() 系统分配内存需要0.01秒时间 ,但就这这个0.01秒 又有其他的线程访问了,这时候就要再次instance 还是为null  又要再次new

  导致了线程不安全。

 

双重检测:

class Singleton4 {   
private Singleton4() {}   
    
public static Singleton4 instance = null;   
    
public static Singleton4 getInstance() {   
if (instance == null) {   
synchronized (Singleton4.class) {   
if (instance == null) {   
instance = new Singleton4();   
}   
            }   
}   
return instance;   
}   
}  

 

优点:
资源利用率高,不执行getInstance()就不被实例,可以执行该类其他静态方法
缺点:
    第一次加载时反应不快,由于java内存模型一些原因偶尔失败

 

静态内部类:

 

class Singleton5 {   
private Singleton5() {}   
     private static class SingletonHelp {   
static Singleton5 instance = new Singleton5();   
}   
public static Singleton5 getInstance() {   
    return SingletonHelp.instance;   
}   
}  

 

优点:
    资源利用率高,不执行getInstance()不被实例,可以执行该类其他静态方法
缺点:
    第一次加载时反应不够快

 

 

 

 

 

 

 

 


 

 


 

 

目录
相关文章
|
2天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
13天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1279 5
|
12天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1307 87
|
1天前
|
弹性计算 安全 数据安全/隐私保护
2025年阿里云域名备案流程(新手图文详细流程)
本文图文详解阿里云账号注册、服务器租赁、域名购买及备案全流程,涵盖企业实名认证、信息模板创建、域名备案提交与管局审核等关键步骤,助您快速完成网站上线前的准备工作。
168 82
2025年阿里云域名备案流程(新手图文详细流程)
|
1天前
|
自然语言处理 前端开发
基于Electron38+Vite7.1+Vue3+Pinia3+ElementPlus电脑端admin后台管理模板
基于最新版跨平台框架Electron38整合Vite7+Vue3+ElementPlus搭建轻量级客户端中后台管理系统解决方案。
150 86