单例模式
模式 单例
2023-09-14 08:57:44 时间
懒汉:
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; } }
相关文章
- 23种设计模式之迭代器模式
- 前端的设计模式系列-单例模式
- 5种单例模式的Java实现[通俗易懂]
- PHPWAMP集成环境Zend组件的相关介绍,环境默认的PHP运行模式「建议收藏」
- 一、单例模式
- 【说站】php中CLI模式是什么
- 【说站】java单例中饿汉模式的使用
- 【说站】JavaScript组合模式是什么
- 漫谈模式之单例模式(破坏和防护的思考)
- 适配器模式(Adapter)
- 一起学习设计模式--01.单例模式
- java设计模式之命令模式详解架构师
- java设计模式之单例模式详解架构师
- 单例模式的几种实现方式详解编程语言
- Linux的发展之路:基于分支模式的构想(linux的分支)
- 命令使用CMD退出MySQL命令编辑模式(cmd退出编辑mysql)
- Oracle价格智能计算改变企业采购利润模式(oracle价格计算公式)
- Redis集群架构主从哨兵模式的探索(redis 集群主从哨兵)
- 腾讯携手中投证券欲打造“智慧券商”,探索证券行业“新零售”模式
- C++中的单例模式(普通,2B,文艺)
- grails不能运行fork模式解决方法
- php设计模式之单例模式使用示例