单例模式的介绍

单例模式简介:
单例模式,是 Java 中最简单的设计模式之一。属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个对象实例,例如:student 类,在当前进程中只创建了一个对象,即一个实例。

单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。

总而言之,单例模式有以下特点:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

单例模式的优点:
1.在内存中只有一个实例,大大减少了内存开销。
2.在单例模式中,活动的单例只有一个实例,对单例类的所有实例化得到的都是相同的一个实例。这样就 防止其它对象对自己的实例化,确保所有的对象都访问一个实例。
3.避免对共享资源的多重占用。

单例模式的应用场景也有许多,例如:
1.Web应用的配置对象的读取,一般也应用单例模式,这个是由于配置文件是共享的资源。
2.Windows的任务管理器(Task Manager)就是很典型的单例模式(这个很熟悉吧),因此大家的电脑是打不开俩个windows task manager的。类似的还有垃圾回收站(Recycle Bin)。
3. 应用程序的日志应用,一般用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好实时更新。
应用场景总结:
(1)资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如上述中的日志文件,应用配置。
(2)控制资源的情况下,方便资源之间的互相通信。

下面简单介绍一个常见的俩种单例模式——饿汉式、懒汉式(以下为java代码实现)
饿汉式:
class Singleton {
// 1.私有化构造器,防止外部调用构造器出现俩个对象实例。
private Singleton() {
}
// 2.内部提供一个当前类的实例
// 3.该实例也必须静态化
private static Singleton single = new Singleton();
// 4.提供公共的静态的方法,返回当前类的对象
public static Singleton getInstance() {
return single;
}
}
!!饿汉式,顾名思义,饿汉会比较急,在类里面已经马上造好了对象实例,已经分配了内存空间,外部调用方法后,直接返回该类已经分配了内存空间的对象实例。

懒汉式:
class Singleton {
// 1.私有化构造器,防止外部调用构造器出现俩个对象实例。
private Singleton() {
}
// 2.内部提供一个当前类的实例
// 3.此实例也必须静态化
private static Singleton single;
// 4.提供公共的静态的方法,返回当前类的对象
public static Singleton getInstance() {
if(single == null) {
single = new Singleton();
}
return single;
}
}
!!懒汉式:顾名思义,比较懒,在类里面并没有马上分配内存空间,而是外部在调用方法后,才进行内存空间的分配,然后才返回这个实例对象。

大家了解多线程的话会发现上面的懒汉式是线程不安全的。大家如果有兴趣的话可以自行百度查看线程安全的懒汉式的代码。这里就不放上代码了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值