zoukankan      html  css  js  c++  java
  • singleTon 模式

    类与类之间是组合关系更好,这样的类与类之间是低耦合,而继承是属于高耦合的关系。
    通过OO隔离变化

    动机:在soft,有这样的类,必须保证他们在系统之中只有一个实例,才能确保他们的逻辑正确性,以及更好的效率,如果通过常规的构造器,提供一种机制来保证一个类只有一个实例。

    意图:保证一个类只有一个实例 ,并提供一个该实例的全局访问点。

    要点:
    singleton中的实例构造器可以设置为protector以允许子类派生。
    singleton一般不要支持ICloneable接口,这样可能导致实例化出多个对象。
    singleton一般不支持序列化
    singleton一般不能应付多线程环境,这样也可能导致出现多个实例
     //应对于单线程
        public class SingletonA
        
    {
            
    private static SingletonA instance;

            
    //一个私有的构造器,禁用构造器
            private SingletonA() {}

            
    public static SingletonA Instance
            
    {
                
    get
                
    {
                    
    if (instance == null)
                    
    {
                        instance 
    = new SingletonA();
                    }

                    
    return instance;
                }

            }

        }


        
    //应对于多线程
        public class SingletonB
        
    {
            
    //volatile关键字用于禁止编译器对指定的顺序进行微调。
            private static volatile SingletonB instance = null;

            
    private static object lockHelper = new object();

            
    //一个私有的构造器,禁用构造器
            private SingletonB() {}

            
    public static SingletonB Instance
            
    {
                
    get
                
    {
                    
    //双锁,用于保证只一个线程使用这里,防止多线程产生多个实例。
                    if (instance == null)
                    
    {
                        
    lock (lockHelper)
                        
    {
                            
    if (instance == null)
                                instance 
    = new SingletonB();
                        }

                        
                    }

                    
    return instance;
                }

            }

        }

    主程序: 

       
       public static void Main()
            
    {
                SingletonA t1 
    = SingletonA.Instance;

                SingletonA t2 
    = SingletonA.Instance;

                Console.WriteLine(
    object.ReferenceEquals(t1, t2) == true);
            }

    singleton模式扩展
    1:将一个实例扩展到N个实例,例如对象池的实现
    2:将new构造器的调用转移到其他类中,例如多个类协同工作环境中,某个局部环境只需要拥有某个类的一个实例。
    3:理解和扩展singleton模式的核心是:如何控制用户使用new对一个类的实例构造器的任意调用。

    带参数的singleton模式:
    public class Singleton
    {
        
    int x;
        
    int y ;
        
    private static Singleton instance;

        
    private Singleton(int x,int y )
        
    {
            
    this.x = x;
            
    this.y = y;
        }


        
    public static Singleton GetInstance(int x,int y )
        
    {
            
    if(instance == null)
            
    {
                instance 
    = new Singleton(x,y);
            }

            
    else
            
    {
                instance.x 
    = x;
                instance.y 
    = y;
            }

            
    return instance;
        }

    }


    public class Test
    {
        
    public static void Main()
        
    {
            Singleton s1 
    = Singleton.GetInstance(100,100);
        }

    }
  • 相关阅读:
    强化学习的基本迭代方法
    基于文本描述的事务聚类
    学习强化学习之前需要掌握的3种技能
    其它 华硕 ASAU S4100U 系统安装 win10安装 重装系统 Invalid Partition Table 解决
    数据分析 一些基本的知识
    Python 取样式的内容 合并多个文件的样式 自定义样式
    电商 Python 生成补单公司需要的评论格式3
    SpringBlade 本地图片上传 生成缩略图
    SQL Server 字符串截取
    SpringBlade 本地图片上传
  • 原文地址:https://www.cnblogs.com/zjbtony/p/714446.html
Copyright © 2011-2022 走看看