设计模式学习4 -- 单例模式

本文介绍了单例模式的概念及其两种实现方式,并通过实例说明了如何在Java中应用单例模式来确保一个类只有一个实例存在,适用于文件系统操作等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.   单例模式(Singleton

1.1. 概述

l         场景:在一个项目中,需要经常对文件系统进行操作,如创建文件,拷贝文件等等,假如这些功能用FileOpe类封装,你如何调用这个类?

FileOpe fo = new FileOpe();

Fo.createFile();

l         但是我们发现,这个类作的工作与具体的业务逻辑似乎关系不大,他做的是一些共性的工作,每次调用都要实例化,似乎太消耗内存。

l         怎样保证在调用的时候,系统中只有一个对象?

1.2. 解决方法:使用单例模式

主要是将构造方法的访问控制符为私有化(private),这样,实例对象就不能直接new

提供一个对外开放静态方法,进行实例对象。有两种方法:

第一种方法:

class FileOpe{

       public static FileOpe fo = new FileOpe();

       public static FileOpe getInstance(){

              return fo;

       }

       private FileOpe(){

              System.out.println("构造函数");

       }

       public void createFile(){

              System.out.println("创建文件");

       }

}

第二种方法:

class FileOpe{

       public static FileOpe fo = null;

       public static synchronized FileOpe getInstance(){//线程同步

              if(fo==null){

                     fo = new FileOpe();

              }

              return fo;

       }

       private FileOpe(){

              System.out.println("构造函数");

       }

       public void createFile(){

              System.out.println("创建文件");

       }

}

1.3. 单例模式要点

l         1:利用静态变量可以做到

l         2:第二种方法

l         举例:hibernate中,SessionFactory的生成,注意,有时候看文档,发现有些类的构造函数是被保护的,或者没有构造函数,十有八九用的就是单例模式。

l         如果:模块做的工作比较公共化,或者模块比较消耗内存。

l         例如:字典的载入,application实际上就是实现了单例模式。

l         练习:完成DirCreator,要求里面包含创建目录的代码,使用单例模式,测试。

1.4. 单例模式小结

l         单例模式主要作用是保证在java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录、数据库连接都需要这样的单线程操作。

l         适合做公共工作

l         单例模式就为我们提供了这样实现的可能。使用单例模式的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值