---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
设计模式
设计模式是指解决某一类问题最行之有效的方法。Java中有23种设计模式,下面我们将仅介绍单例设计模式。
单例设计模式:解决一个类在内存中只存在一个对象。想要保证对象唯一需要以下步骤:
1、为了避免其他程序建立该对象,先禁止其他程序建立该对象。
2、还为了让其他程序访问到该类对象只好在本类中,自定义一个对象。
3、为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
那么这三步该怎么用代码体现呢?
1、将构造函数私有化。
2、在类中创建一个本类对象。
3、提供一个方法可以获取到该对象。
对于单利模式的代码实现我们有两种方法:饿汉式和懒汉式。
一、饿汉式
来看个例子:
class Single
{
private Single(){};
private static Single s = new Single();
public static Single getInstance()
{
return s;
}
}
class SingleDemo
{
public static void main(String[] args)
{
Single ss = Single.getInstance();
}
}
<span style="font-size:14px;">
</span>
所谓饿汉式就是指Single 类一进内存就已经创建好了对象。内存图如下:
如果在程序的main函数中再加入一句:Single s2 = Single.getIntance();
那么s2和ss均指向同一个对象。这样就起到了对象唯一的作用。
二、懒汉式
来看一下懒汉式的程序代码:
class Single_2
{
private static Single s =null;
private Single(){}
public static Single getInstance()
{
if(s==null)
s = new Single();
return s;
}
}
class Single_2Demo {
public static void main(String[] args) {
Single s1 = new Single.getInstance();
}
}
所谓懒汉式是指对想方法被调用是才初始化,也叫做对象的延迟加载,即Single类进内存,对象还没有存在,只有调用了getIntance方法时,才建立对象。但是对于多 CPU的电脑来说这种方式并不能保证对象的唯一性。那么如何调整才能保证对象的唯一性呢,这时需要用到同步机制了,见代码:
//同步机制
class Single_2
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if(s==null)
{
synchronized(Single.class)
{
if(s==null)
s = new Single();
}
}
return s;
}
}
虽然以上代码可以保证对象的唯一性了,但是,比较次数增加了,也就增加了代码的时间复杂度,所以在实际编程时,我们用的是饿汉式设计模式。
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------