单例设计模式


单例(Singleleton)设计模式

这篇比较短的文章简单的介绍如何完成单例设计。

1.1 单例设计模式产生的原因

     在大部分时候,我们把类的构造器定义为public访问权限,允许任何类自由创建该类对象。但在某些时候,允许其他类自由创建该类对象没有任何意义。有时候根据需要,对某个类而言只能创建一个对象,那么这个类就称为单例类,这种模式叫做单例设计模式。

1.2 如何设计单例

(1)为了防止其他类自由创建该类,我们需将其构造器隐藏起来:构造器访问权限设置为private。

(2)由于缺少构造器,其他类不能像通常情况下使用new关键字来创建该类对象,单例类就需要对外提供一个方法用以返回该类对象,由于没有对象调用,这个方法只能通过类来访问,这个方法要设计为类方法(用static关键字修饰)

(3)为了保证只创建一个对象,要在单例类本身创建本类对象。

下面来看看代码是如何实现的

public class Single
{
//构造函数私有化,防止无限制新建对象
private Single()
{}
//在类中建立本类对象
private static Single s = new Single();
/*
   提供一个返回本类对象的方法,由于构造函数的私有化,无法用
   new来新建对象,想要此方法,只能添加关键字static,通过类名
   来访问
*/
public static Single getInstance()
{
return s;
}
public static void main(String args[])
{
Single ss = Single.getInstance();
}
}




这种方式称为恶汉式。在类完成加载时,就创建了该类对象

下面这段代码是另外一种实现方式,原理相同:

(1)隐藏构造函数

(2)创建本类对象

(3)对外提供公共方法,返回该对象

具体实现如下:

public class Singleton
{
//私有化构造器
private Singleton(){}
//创建私有属性有来缓存本类对象
private static Singleton instance;
//对外提供方法,返回该类对象
public static Singleton getInstance()
{
if(instance == null)
instance = new Singleton();
return instance;
}
public static void main(String args[])
{
//两次调用方法创建对象
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
/*由于没有重写,equals 方法比较的是两个引用所指向的地址值,
即比较两者是否指向同一个对象
*/
System.out.println(s1.equals(s2));
}
}



输出结果为:true 。这表明,两个引用指向了一个对象,也就是说在内存中我们只创建了一个Singleton 的对像。上述实现单例的方式也叫做懒汉式,只有在调用方法时,才产生对象,当然这段代码并不完善,没有对传入对象做匹配检测。但是,在实际使用时,推荐使用饿汉式,简单方便。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值