zoukankan      html  css  js  c++  java
  • 泛型单一模式

    泛型单一模式类:(fully lazy instantiation) 

    public sealed class Singleton<T>
            
    where T : class
        {
            
            
    public static T Instance
            {
                
    get
                {
                    
    return Nested.instance;
                }
            }

            
    private class Nested
            {
                
    // Explicit static constructor to tell C# compiler
                
    // not to mark type as beforefieldinit
                static Nested()
                {
                }

                
    internal static readonly T instance = typeof(T).InvokeMember(typeof(T).Name, BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.NonPublic, nullnullnullas T;
            }
        }

    实现要点
    1. 静态构造函数
    静态构造函数用于初始化任何静态数据,所以它的执行顺序应该在静态成员初始化之后。

    class Test
        {
            
    static int value= 1//第一步

            
    static string staticString;

            
    static Test()
            {
    //第三步
                value = 2;
                value2
    = 3;
            }

            
    public static int value2= 1//第二步

        }

    当程序第一次执行如下语句时
    Test test
    = new Test();
    执行顺序就是上面标出的步骤。
    也就是说 
    test.value 
    = 2
    test.value2 
    = 3

    2. 嵌套类的静态构造函数的作用
    嵌套类的静态构造函数不会随着外部类的触发而初始化。有了嵌套类的静态构造函数,它会告诉C#编译器只有当需要使用内嵌类的时候,嵌套类的静态数据才开始初始化。所以上面介绍的单一模式是属于完全延迟初始化。
    3.利用反射时使用"BidingFlags.NonPublic”,确保调用的的具体单一实例类中的private constructor.事实上,具体单一实例类中不应该有public的构造函数。为了就是确保不被误实例化。
    4.使用sealed 关键字,防止被继承。

    具体单一实例类: 

    Code

     Main:

    Code

    为什么不用double-check locking来实现,请参照

    http://www.yoda.arachsys.com/csharp/singleton.html 

    泛型单一模式参考地址:

    http://www.codeproject.com/KB/architecture/GenericSingletonPattern.aspx

  • 相关阅读:
    HAProxy的基础配置详解
    Nginx七层负载均衡的几种调度算法
    基于PXE网络启动的Linux系统自动化安装
    centos源码编译安装新版本内核
    Linux计划任务管理
    Linux多网卡绑定(bond)及网络组(team)
    Linux逻辑卷管理(LVM)
    pandas基础操作
    subprocess
    python常用库(转)
  • 原文地址:https://www.cnblogs.com/webfpc/p/1441221.html
Copyright © 2011-2022 走看看