黑马程序员--java单列设计模式
来源:互联网 发布:空间数据编辑 编辑:程序博客网 时间:2024/05/22 07:40
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
以下介绍一下单例设计模式:
单例,即单个实例对象。那么单例设计模式:即解决一个类在内存中只存在一个对象。
那么想要保证对象唯一:
1,为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象。
2,还为了其他程序可以访问到该类对象,只好在本类中,自定义一个对象。
3,为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
那么如何用代码来实现上述思路呢?
1,禁止其他程序建立该类对象,即将构造函数私有化即可。
2,在类中创建一个本类对象。
3,为了使其他对象访问到该自定义对象,可以提供一个方法获取到该对象。
代码实现主要有两种方式:饿汉式,懒汉式。
饿汉式:即先初始化对象。
饿汉式代码实现如下:
class Single
{
private Single(){} //将构造函数私有化
static Single s = new Single(); //在本类中自定义一个对象,该s要被静态方法访问到,所以要用static修饰
public static Single getInstance(){//对外提供一个方法,可以获取对象,
return s; //另外,不能创建对象,所以必须用类名调用,所以要用static修饰
}
}
class SingleDemo
{
public static void main(String[] args)
{
Single ss = Single.getInstance;//这样创建的对象都是同一个对象了。
}
}
懒汉式:即对象是方法被调用时,才初始化,也叫做对象的延时加载。在这里,指的是,single类进内存,
对象还没有存在,只有调用了getInstance 方法时,才建立对象。
懒汉式代码实现如下:
class Single
{
private Single(){}
private static Single s = null;//这里暂时先不创建对象。
public static Single getInstance()
{
if(s==null){
B-->进来。所以创建的就不是同一个对象了,会出现安全隐患。
A-->可能等在这。
s = new Single();
}
return s;
}
}
但是注意,懒汉式中容易出现安全隐患,所以可以在方法中加一个锁,即synchronized.
即public static synchronized Single getInstance();
然而,加上一个锁之后,程序就变得低效率了。那么应该怎么办呢?
可以进行双重判断。
public static Single getInstance()
{
if (s==null){
synchronized (Single.class)//静态函数所使用的锁是所在类的字节码文件对象,即类名.class
{
if(s==null){
s= new Single();
}
}
}
}
这样既可以保证不会出现安全隐患,也保证了效率。但是代码有点复杂。
所以,在实际开发过程中,主要还是用饿汉式单例设计模式。
----------------ASP.Net+Unity开发、.Net培训、期待与您交流! --------------
详情请查看:www.itheima.com
- 黑马程序员--java单列设计模式
- 黑马程序员---单列设计模式
- 黑马程序员 单列设计模式
- 黑马程序员——JAVA基础之单列设计模式
- 黑马程序员_10_单列设计模式
- 黑马程序员_Java基础[11]_单列设计模式
- java单列设计模式
- Java单列设计模式
- java设计模式--单列模式
- java设计模式-单列模式
- java 设计模式-单列模式
- Java设计模式 单列模式
- java 中的单列设计模式
- java设计模式之单列
- 黑马程序员——java-模式(工厂模式,单列模式,适配器模式)
- 黑马程序员-Java设计模式
- 黑马程序员---java设计模式
- 黑马程序员-Java设计模式
- USACO Barn Repair(greedy)
- 创建Entitlements文件与编译iOS APP
- 12个不可不知的Sublime Text应用技巧和诀窍
- resin 4.0数据源的配置
- CSS3无前缀脚本prefixfree.js及Animatable介绍
- 黑马程序员--java单列设计模式
- 人群密度检测论文笔记
- 黑马程序员_初识ios来源发展使用
- NSString字符串比较
- HttpServlet 笔记
- COCOS2D 释放资源的最佳时机
- css text-transform
- C++模板函数初次使用
- Java中多态性的实现