大话设计模式读书笔记2——单例模式

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

我们来看一下单例模式下的饿汉模式代码:

    /// <summary>
    /// 饿汉模式
    /// </summary>
    public class Singleton
    {
        //私有的构造器
        private Singleton()
        {
        }

        //私有的静态实例
        private static Singleton instance = new Singleton();

        public static Singleton GetInstance()
        {
            return instance;
        }
    }

懒汉模式代码:

    /// <summary>
    /// 懒汉模式
    /// </summary>
    public class Singleton2
    {
        //私有的构造器
        private Singleton2()
        {
        }

        //私有的静态实例
        private static Singleton2 instance = null;

        public static Singleton2 GetInstance()
        {
            if (instance==null)
            {
                instance=new Singleton2();
            }
            return instance;
        }
    }

 饿汉模式和懒汉模式的区别:

饿汉模式加载类时比较慢,但运行时获取对象的速度比较快,线程安全的

懒汉模式加载类时比较快,但运行时获取对象的速度比较慢,线程不安全的

C# 下的单例模式:

1、线程不安全:

 //C# 下的单例模式(线程不安全)
 public class Singleton3
 {
   public static readonly Singleton3 instance = new Singleton3();

   private Singleton3()
   {
   }
 }

上面的实现完全可以达到单例模式的意图,保证一个类仅且有一个实例,并提供一个全局访问点.而这在实际应用我们还得注意一点,就是在多线程的调用.于此,我们还得保证线程安全.要保证线程安全其实也是很简单就可以实现的,只需要通过加锁和双重判断就OK,下面是简单的多线程的线程安全的实现:

2、线程安全:

    //C# 下的单例模式(线程安全)
    public class Singleton4
    {
        /// <summary>
        /// 声明一个静态锁
        /// </summary>
        private static object lockHelper = new object();        

        //私有构造函数
        private Singleton4()
        {
        }

        //注意使用 volatile 关键字
        private static volatile Singleton4 instance = null;

        //静态属性
        public static Singleton4 Instance
        {
            get
            {
                if (instance == null)  //双检查
                {
                    lock (lockHelper)
                    {
                        if (instance == null)
                        {
                            instance = new Singleton4();
                        }
                    }
                }
                return instance;
            }
        }
    }

--=源码下载=--

大话设计模式读书笔记2——单例模式

时间: 2024-11-16 05:20:18

大话设计模式读书笔记2——单例模式的相关文章

大话设计模式读书笔记2——策略模式

策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类直接的耦合. UML 图: 根据<大话设计模式>——第二章 商场促销这个案例代码来简单的记录一下策略模式的使用方式: /// <summary> /// 现金收费抽象类 /// </summary> public abstract class CashSuper { /// <summary> ///

大话设计模式读书笔记1——简单工厂模式

最近几日,重温了一下<大话设计模式>这本书,当时读的仓促,有很多没有注意的地方,现在仔细翻看起来,发现这值得细细品味的一本书!! 好东西就要记下来!!! 第一章笔记:从一个简单的计算器程序来看简单工厂模式. 变化的地方就要封装,用一个单独的类来做创造实例的过程这就是工厂. UML图: /// <summary> /// 运算类 /// </summary> public class Operation { public double Number1 { get; set

大话设计模式读书笔记--设计模式总结

前言 大话设计模式看了两遍,之前看过一遍,理解的不深刻, 这次用了一个月多点的时间再次温习,利用下班后的时间回来学习,把学习心得记录下来,加深了对面向对象的理解 之前是看到一个需求搞清楚业务流程之后立刻就去做了,很少从设计层面的角度考虑,现在在开发程序时,开始有了设计的思想,也有了达到可维护,可复用,可扩展目的具体的实现方法 每当看到经过优化代码的效果时,就想起一句话:精彩的代码是如何想出来的,比看到精彩的代码更加令人兴奋 下面是用自己的话进行的总结,以便加深记忆和理解 创建型 抽象工厂 定义:

设计模式(&quot;大话设计模式&quot;读书笔记 C#实现)

前言:毫无疑问 ,学习一些设计模式,对我们的编程水平的提高帮助很大.写这个博客的时候自己刚开始学习设计模式,难免有错,欢迎评论指正. 我学设计模式的第一本书是“大话设计模式”. 1.为什么要学设计模式? 设计模式的存在就是为了抵御需求变更.学会了这些思想,开始一个项目的时候考虑的更多,当用户提出变更的时候项目改动更少. 2.怎么才能学会设计模式? 我不知道,不过轮子哥(vczh)文章中的一句话,我觉得对,就是:“设计模式就是因为情况复杂了所以才会出现的,所以我们只能通过复杂的程序来学习设计模式.

大话设计模式读书笔记(一)

上周从同事那里搞到一本大话设计模式的书,便看了起来,对于我这种非科班出身的人来说,还是很有用处的.这些设计模式的终极目的都是让代码更好看,更好用,更好拓展,在需求变化的时候,尽可能少的改动代码 先记录自己已经学到的几个部分: 1.开放——封闭原则 软件实体对于拓展的开放的,对于修改时封闭的.及对已经写好的类来说尽力避免修改,可以通过拓展其父类来实现对他的修改.增强可维护性. 2.单一职责原则 就一个类而言,应该只有一个引起它变化的原因 具体而言,如果你能想到多于一个动机去改变一个类,那么这个类就

大话设计模式读书笔记4——模版方法模式

模板方法是一种常见的设计模式,它定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. UML图: 具体实现代码: namespace TemplateMethod { class Program { static void Main(string[] args) { AbstractClass A = new ConcreteClassA(); A.TemplateMethod(); AbstractClass B = new

大话设计模式读书笔记--12.状态模式

定义 状态模式定义: 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来改变了其类 消除庞大的条件分支,将特定状态的行为放入一个对象中 生活中:开灯和关灯是两个状态 模式结构 Context: 上下文环境,维护一个状态实例,定义当前的状态 State: 抽象状态类,定义一个接口,封装与Context的一个特定状态相关的行为 ConcreteState:具体状态.实现Context的一个特定状态相关的行为 代码实现 场景: 12店之前是休闲状态, 之后是忙碌状态 点击下载代码 特点及使用场

大话设计模式读书笔记--5个原则

单一职责原则 定义: 就一个类而言,应该仅有一个引起它变化的原因 如果你能想到多余一个的动机去改变一个类,那么这个类就具有对于一个的职责,就应该考虑类的职责分离 职责过多的坏处 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其它职责的变化,这些耦合会导致脆弱的设计,当发生变化时,设计会遭受意想不到的破坏 开发中 软件设计的重要部分,就是发现职责,并把职责相互分离 开放封闭原则 定义: 软件实体(类,函数,模块等),应该可以扩展,但是不可以修改 面对

大话设计模式读书笔记--23.访问者模式

定义 访问者模式定义: 表示一个作用于某对象结构中的各元素的操作,它使你在不改变各元素的类的前提下,定义作用于这些元素的新操作 把数据结构, 和作用于数据结构上的操作,分离 模式结构 代码实现 场景: 男人和女人谈恋爱,男人的状态和女人的状态 代码实现:点击下载 特点和使用场景 优点:很容易增加新的操作 缺点: 使增加新的数据结构变得困难 使用场景: 数据结构相对稳定的系统