zoukankan      html  css  js  c++  java
  • 1. [Singleton] 单例模式

    模式动机(Motivation):

      在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。

    意图(Intent):

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

    从目的来看单例模式划分为:

      -创建型(Creational)模式 :负责对象创建

      -结构型(Structural)模式:处理类与对象间的组合

      -行为型(Behavioral)模式:类与对象交互中的职责分配

    简单单例模式实例代码 

    1.  单线程: public class Singleton //Simple Singleton Method1
        {
            private static Singleton instance;
            private Singleton() { }
            public static Singleton Instance
            {
                get            {
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                    return instance;
                }
            }
        }

     

    2.    多线程:
    public class Singleton //Simple Singleton Method2
        {
            private static volatile Singleton instance;
            private static object lockHelper =new object();
            private Singleton() {}
    
            public static Singleton Instance
            {
                get            {
                    if(instance ==null)
                    {
                        lock(lockHelper)
                        {
                            if(instance ==null)
                            {
                                instance = new Singleton();
                            }
                        }
                    }
                    return instance;
                }
            }

     

    3.  单例模式传参 
    public class Singleton //单例模式传参实例 { private static volatile Singleton instance; private int x, y; private static object lockHelper =new object(); private Singleton(int i, int j) { this.x = i; this.y = j; } public static Singleton GetInstance(int x, int y) { if(instance ==null) { lock(lockHelper) { if (instance == null) { instance = new Singleton(x, y); } else { instance.x = x; instance.y = y; } } } return instance; } }

    单线程Singleton模式几个要点:  
    • Singleton模式中的实例构造器可以设置为protected以允许子类派生。  
    • Singleton模式一般不要支持ICloneable接口,因为这可能会导致多个对象实例,与Singleton模式的初衷违背。
    • Singleton模式一般不要支持序列化,因为这也有可能导致多个对象实例,同样与Singleton模式的初衷违背。  
    • Singletom模式只考虑到了对象创建的管理,没有考虑对象销毁的管理。就支持垃圾回收的平台和对象的开销来讲,我们一般没有必要对其销毁进行特殊的管理。  
    • 不能应对多线程环境:在多线程环境下,使用Singleton模式仍然有可能得到Singleton类的多个实例对象。

  • 相关阅读:
    docker架构的详解
    docker的核心原理-cgroup
    网络运维面试题
    100道linux运维笔试题
    运维岗位面试题集合
    python——筛子游戏
    同道前辈
    delphi中使用SocketStream读写数据的技巧
    百度地图API
    HTML中小meta的大作用
  • 原文地址:https://www.cnblogs.com/Blackeye286/p/3340930.html
Copyright © 2011-2022 走看看