码迷,mamicode.com
首页 > 其他好文 > 详细

最简单的设计模式---单例模式

时间:2015-02-11 16:47:56      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:设计模式   系统架构   

        在Android操作系统中,常常使用到一种模式----单例模式。其实我们在项目开发过程中,也经常用到;例如:在C/S模式中,我们对工具栏的初始化;点击按钮弹出的对话框等。通常我们用一个全局变量使得一个对象访问,但它不能防止实例被多次实例化;最好的办法就是让类直接管理自己的实例对象,并返回实例对象。

      什么是单例模式?保证一个类中仅有一个实例;并提供一个访问它的全局访问点。也就是说,一个类中他的所有构造方法为private类型,这样保证只能在类中创建对象;在类中声明一个全局的类对象实例;第三,在类当中应该定义一个方法用于创建并返回当前唯一的对象实例。

   技术分享

     我们在代码设计的时候,有两种方式实现:饿汉式单例模式和懒汉式单例模式。饿汉模式是在类中定义并创建了并创建了对象;而懒汉式则是在需要用的时候,调用对外的方法判断并创建对象;各有各的好处,大家在使用的时候需要灵活应用。

//懒汉式单例模式
class Singleton
{
private static Singleton singleton;
private Singleton()
{}
public static Singleton getInstance()
{
if(singleton==null)
{
singleton=new Singleton();
}
return singleton;
}
}


//饿汉式单例模式
public class sealed Singleton
{
private static  readonly Singleton singleton=new Singleton();
private Singleton()
{}
public static Singleton getInstance()
{
return singleton;
}
}

       到这里,咱们已经基本把原理弄清楚了;在多线程的时候,我们需要重新改改代码、用双重锁的方式(饿汉模式也可以,但是它在加载的时候就创建了对象实例,这样会占用内存;直到运行结束);要不然就会出现多个对象实例了。

//双重锁防止多次创建对象实例
class Singleton
{
	private static Singleton singleton;
	private static  readonly object obje=new object();
	private Singleton()
	{}
	public static Singleton getInstance()
	{
		if(singleton==null)
		{
		   //借用一个对象实例来锁定代码区域,
		   lock(obje)
		   {
		        //保证即使有两个线程同时进入线程排队后,也只创建一次实例
				if(singleton==null)
				{
				   singleton=new Singleton();
				}
		   
		   }
		}
		return singleton;
	}
}


最简单的设计模式---单例模式

标签:设计模式   系统架构   

原文地址:http://blog.csdn.net/sevenkj/article/details/43733751

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!