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

        在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;
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值