黑马程序员技术交流社区
标题:
[太原校区]设计模式之单例模式详解
[打印本页]
作者:
爱学习的翟
时间:
2019-5-24 16:52
标题:
[太原校区]设计模式之单例模式详解
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
单例的特点:
1.只有一个实例
2.这个实例由自己创建
,构造方法私有
3. 对外提供一个返回唯一实例的方法
单例模式常用的两种创建方式
方式一:饿汉式(不管你用不用我先给你创建)
public
class
Singleton
{
private
static
Singleton
instance
=
new
Singleton
(
)
;
private
Singleton
(
)
{
}
public
static
Singleton
getInstance
(
)
{
return
instance
;
}
}
方式二:懒汉式(想不给你创建,你要用了我再给你创建)
public
class
Singleton
{
private
static
Singleton
instance
;
private
Singleton
(
)
{
}
public
static
Singleton
getInstance
(
)
{
if
(
instance
==
null
)
{
instance
=
new
Singleton
(
)
;
}
return
instance
;
}
}
两种方式对比:饿汉式因为在初始化时就创建,会占内存;
懒汉式有线程安全问题,不适用与多线程应用.需要加锁才可以在多线程中使用,但是加锁会影响程序执行效率
第三种方式:双重锁 方式
public
class
Singleton
{
private
volatile
static
Singleton
singleton
;
private
Singleton
(
)
{
}
public
static
Singleton
getSingleton
(
)
{
if
(
singleton
==
null
)
{
synchronized
(
Singleton
.
class
)
{
if
(
singleton
==
null
)
{
singleton
=
new
Singleton
(
)
;
}
}
}
return
singleton
;
}
}
双重锁优势:懒加载保证了占用内存问题,双重锁保证了多线程中的 效率问题
总结:一般情况下使用方式一 ;不推荐使用方式二,有特殊要求时 使用方式三(满足各方要求)
作者:
张志辉
时间:
2019-5-24 16:57
[加油],点击[ http://pinyin.cn/e243583 ]查看表情
作者:
六记
时间:
2019-5-24 17:05
作者:
Julien27
时间:
2019-5-25 15:27
学完这篇总结,面试10分轻松到手
作者:
郝永亮
时间:
2019-6-4 16:48
学习了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2