Singleton

从今天开始正式学习C#设计模式:

第一章:     Singleton模式(单列模式)

该模式为创建形模式,(Creational)

Intent:

确保在系统中只有一个实例,并提供一个该实例的全局访问点(这个责任应该是类设计者的,而非使用者责任)

单线程情况下:

public   class  Thread
{
    
private static Thread _Instance = null;
    
private Thread()
    
{
    }

    
public static Thread Instance
    
{
        
get 
        
{
            
if (_Instance != null)
            
{
                _Instance 
= new Thread();
            }

            
return _Instance;
        }

    
    }

}

 

多线程情况下:

public   class  MultiThread
{
    
private static volatile MultiThread _Instance = null;
    
private static object lockHelper = new object();
    
private MultiThread()
    
{ }

    
public static MultiThread Intance
    
{
        
get
        
{
            
if (_Instance != null)
            
{
                
lock (lockHelper)
                
{
                    
if (_Instance != null)
                    
{
                        _Instance 
= new MultiThread();
                    }

                }

            }

            
return _Instance();
        }

    }

}

另外一种比较好的方法(但该方法不支持在创建对象时使用参数)

 

public   class  AnotherMethod
{
    
public static readonly AnotherMethod Intance = new AnotherMethod();
    
private AnotherMethod()
    
{ }
}

注意:

C#中,静态构造器只在静态属性和方法之前执行,因为该方法是RunTime调用,所以无法传参.

扩展:

1,将只能有1个实例,扩展到只能有N个实例子,例如对象池的实现

2,将new 构造器的调用转移到其他类中,例如多个类协同工作环境中,某个局部环境只需要拥有某个类的一个实例。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值