java中的二十三种设计模式之1---单例模式
来源:互联网 发布:app数据分析 编辑:程序博客网 时间:2024/06/11 22:36
最近在学习java中的设计模式,突发奇想的写点文章来说明自己的见解,所谓的单例模式(Singleton),很明显就是一个的意思,而这种单例模式在java运用中是非常广泛的,但是我们可能不会去过多的写单例模式的代码,单例模式一般在引用的api中使用的比较的多,因为很多时候有的资源是不容许出现多次的,而且必须只有一个供访问,所就出现了单例模式,单例模式分为饿汉式和懒汉式。
饿汉式:是使用的类在调用之前就已经实例化了一个对象,我们调用使用方法即可
懒汉式:只有在调用的时候才会实例化一个对象,否则是不会实例化对象的,而且只有一个
懒汉式:
public class LazySingleTon { private LazySingleTon(){ } private static LazySingleTon lazySingleTon=null; public static synchronized LazySingleTon getInstance(){ if(lazySingleTon==null) lazySingleTon=new LazySingleTon(); return lazySingleTon; }}
此处中的这个getInstance函数前有一个关键字synchronized,这个是关于锁的机制,因为如果不加锁可能会导致产生不同的实例,原因如下:因为如果有多个测试端同时访问调用这函数,这时判断的都是lazySingleTon为空,所以就会实例化一个对象,这样就导致了产生了多个对象,就不能保证单例的模式了,所以这个同步锁是很关键的一步,顺便说一下synchronized的含义:对这个函数加锁,如果有访问时其他的就只能等待,否则可以访问。饿汉式:
public class SingleTon { private SingleTon(){ } private static SingleTon singleTon=new SingleTon(); public static SingleTon getInstance(){ return singleTon; }}Test:
SingleTon singleTon1=SingleTon.getInstance();SingleTon singleTon2=SingleTon.getInstance();System.out.println(singleTon1.hashCode());System.out.println(singleTon2.hashCode());LazySingleTon lazySingleTon1=LazySingleTon.getInstance();LazySingleTon lazySingleTon2=LazySingleTon.getInstance();System.out.println(lazySingleTon1.hashCode());System.out.println(lazySingleTon2.hashCode());这两种方式获取的hascode是相同的,所以称做事单例模式
阅读全文
0 0
- java中的二十三种设计模式之1---单例模式
- 二十三种设计模式之单例模式
- 二十三种设计模式之一单例模式
- 二十三种设计模式之一单例模式
- 博客专栏:二十三种设计模式之单例模式
- Java开发中的23种设计模式之二十三:解释器模式(Interpreter)
- 黑马程序员 学习笔记——Java 二十三设计模式之单例
- 二十三种设计模式之创建型模式之单态模式
- java二十三种设计模式----(三)单例设计模式 :类适配器和对象适配器
- c++中的二十三种设计模式
- Java中的设计模式学习总结(二)---单例模式
- 二十三种设计模式(java版)之Iterator
- 二十三种设计模式(java版)之Adapter
- 二十三种设计模式(java版)之Template Method
- 二十三种设计模式(java版)之Factory Method
- Java模式设计之单例模式(二)
- Java模式设计之单例模式(二)
- 浅析JAVA设计模式之单例模式(二)
- angularjs 中a标签中href属性带有unsafe:javascript解决方案
- 图片上传
- 样本价值几何
- dubbo+zookeeper+SpringMVC详解
- 通过G代码演示逐行读取的字符串处理
- java中的二十三种设计模式之1---单例模式
- 包含高德,百度等地图 apikey 项目打包 relese debug keystore
- 常用的Mysql数据库操作语句大全
- Java基础学习之泛型(泛型方法、泛型类、通配符的使用)
- intentService
- c#172课的主要内容
- 【sublime】解决Package Control :install package 报错
- 移动web-viewport定义
- OpenCV学习笔记(21)OpenCV的Rect矩形类用法