设计模式之Singletion的学习笔记

本文详细介绍了单例模式在单线程及多线程环境下的实现方法,并探讨了如何利用静态成员来实现单例模式。此外,还讨论了单例模式在 .NET 框架中的应用,包括 Type 类型和 HttpContext.Current 的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、单线程下Singletion对象实现

    class Singletion
{

    //单线下的单件模式
    private static Singletion instance;

    private Singletion(){}//保证实例不被初始化,c#编译器默认都会构造一个无参的构造器。加private对它进行私有化出来后就可以避免让编译器默认构造。
    public static Singletion Instance
    {
        get
        {
            if (instance == null)
            {
                instance= new Singletion();
            }

            return instance;
        }
    }
}

2、多线程下Singletion对象实现,关键字volatile 很重要 告诉编译器按照我写的代码顺序进行编译。因为c#编译器
有可能对我写的代码的编译顺序进行微调。

 class Singletion
{
    private static volatile Singletion instance=null;
    private static object lockHelper = new object();
    private Singletion() { }

    public static Singletion Instance
    {
        get
        {
            if (instance == null)
            {
                lock (lockHelper) //加上一个锁,多个线程执行时候有可能都会执行到这里(几率很少但可能发生),这样的话,就失去了Singletion的意义。
                {
                    if (instance == null)
                    {
                        instance = new Singletion();
                    }
                }
            }
            return instance;
        }
    }
}


3、静态的Singletion 只是对于无参数的构造器使用。如果带有参数可以采用属性+方法进行分离。
如:class Singletion{
  public static readlonly Singletion instance=new Singletion();
  private static(){}
}

注意:这三种方式创建Singletion时 都必须改写 Singletion 默认构造器(private static(){})因为:c#
编译器在编译时会给类默认添加无参构造器。所以我们要改写。(private即外部访问不到)

Singletion 模式学习的扩展思考:
 1、如何将一个实例扩展到n各实例?即只能创建n个实例。
 2、c#如何实现对象池?
 3、多个类协同工作环境中如何运用Singletion?
 4、如何控制用户new对一个类的实例构造器的任意调用?

 .net 框架中Singletion应用
  Type类型其实内部实现了Singletion模式的运用
  MyClass t1=new MyClass();
  MyClass t2=new MyClass();

  Type type1=t1.GetType();
  Type type2=t2.GetType();

保证type1,type2唯一。只要type1,type2的实际对象一样,他的引用对象也
就一样。
  即type1==type2;

  另一个就是net中的HttpContext.Current 在局部领域也是一个Singletion
模式的实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值