如果一个类始终只能创建一个实例,则这个类被称为单例类。在一些特殊情况下,系统会不允许自由创建某个类的对象,二十一只能为该类创建一个对象,此时就可以把该类的构造方法使用private修饰,将其所有的构造方法隐藏起来。一旦把该类的构造方法隐藏起来,则需要提供一个public方法,作为该类的访问点,用于创建该类的对象,并且该方法必须使用static修饰(因为调用该方法之前还不存在对象,因此调用该方法的不可能是对象,只能是类),除此之外,该类还必须缓存已经创建的对象,否则随后他无法知道是否曾经创建国对象,也就无法保证值创建一个对象。为此该类需要使用一个属性来保存曾经创建的对象,且因为属性需要被上面的静态方法访问,所以必须使用static修饰,基于上面的介绍,我们来创建一个单例类:
class Single {
// 使用一个变量来缓存创建的实例
private static Single single;
// 将构造方法使用private修饰,隐藏该构造方法
private Single() {
}
// 提供一个静态方法用于返回Single实例,该方法可以假如自定义的控制,保证值产生一个Single对象
public static Single singleT() {
if (single == null) {
single = new Single();
}
return single;
}
}
public class SingleTest {
/**
* @author 肖阳
*/
public static void main(String[] args) {
// 创建Single对象 不能通过构造方法,只能通过singleT方法
Single s1 = Single.singleT();
Single s2 = Single.singleT();
System.out.println(s1 == s2);
}
}
程序输出:true
通过上面的singleT方法提供的自定义控制,保证Single类只能产生一个实例,所以在SingleTest类的main方法中看到两次产生的Single对象实际上是同一个对象
分享到:
相关推荐
提供外界访问的两个方法!--和单例类一起使用!面试时经常用到!
创建单例类的3中方式:饿汉子式、懒汉子式、注册式
甚至是有垃圾回收机制的C#上也是这样的,系统切换了功能模块还存在大量的这个模块根本不使用的单例类对象,实际上是很浪费存储空间的,单例类少还好说,如果单例类有几十甚至几百的时候(中大型项目这个数量不算夸张...
FMDB的自定义单例类的数据库demo
一个大牛写的控制重复播放的单例类,使用的时候直接包含使用单例的方法就可以解决 多视图叠加播放的问题
简单介绍单例类与对象工厂,定义了一个单例类与对象工厂,及其实现代码,有助与理解
apache mina与单例类集合实现网络通讯V1.0
FMDBsharedInstance 多线程环境下使用 FMDB的单例类封装.
ios接入Vungle视频广告的单例类,测试Vungle 6.32版本,XCode 10.1 文章地址:https://blog.csdn.net/linna321521/article/details/87629835
Sqlite3 C++ 简单单例数据库操作类封装,支持数据的简单操作,可用,尚不完善
单例类 描述 指在整个系统生命期中,一个类最多只能有一个实例(instance)存在,使得该实例的唯一性(实例是指一个对象指针) , 比如:统计在线人数 在单例类里,又分为了懒汉式和饿汉式,它们的区别在于创建实例的时间不同...
unity中在场景切换时需要经常数据分享并处理,在此分享给大家利用C#模式和Unity模式分别实现的单例共享数据
C++单例设计模式,单例模式 C++单例设计模式,单例模式
Java中懒汉单例设计模式线程安全测试,单例设计模式的测试
单例类保证一个类全局仅有一个实例,并提供一个全局访问点,由于只能生成一个实例,因此我们必须把构造函数设为私有函数以禁止他人创建实例。 实现1:懒汉式,线程不安全 该实现没有额外开销,不要求线程安全的情况...
用于 iOS 开发的应用内购买的单例类(仅限非消耗品)ARC 兼容 用法 注意StoreKit 不适用于模拟器。 您必须在物理设备上进行测试。 对于已经通过 iTunes Connect 设置应用内购买的项目来说,这是一个不错的选择。 ...
本文实例讲述了PHP实现的Redis多库选择功能单例类。分享给大家供大家参考,具体如下: 前言 qq群里有同学问redis如何进行多库选择,用php实现了一下,还望各位多多指点 代码 <?php class MultiRedisConnect { /**...
* 购物车单例类 * * @author YING * @param void * @return void */ class CartSingleton { //定义一个静态的私有变量 static private $_instance=null; private $redis=null; //私有化的构造方法 ...
单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 Singleton模式包含的角色只有一个,就是Singleton。Singleton拥有一个私有构造函数,确保用户无法通过new直接...