重头开始学23种设计模式:单例模式

最近感觉做程序又开始浑浑噩噩,对设计模式和算法基本了解,但基本不会用。所以打算最近1个月把设计模式和算法重新,温故而知新下。

首先从程序开发经常涉及到的23种设计模式开始,希望这次能更加熟练的运用设计模式来加强自己的开发能力。

首先从单例模式开始:

单例模式在我的理解是对程序对象的缓存,防止不断new,保持对象唯一性,提高程序性能。

namespace SinglePattern {
    class Program {
        static void Main(string[] args) {
            for (int i = 0; i < 100; i++)
            {
                Task.Run(() =>
                {
                    Singleton objSingleton = Singleton.GetInstance;
                });
            }
            Console.Read();
        }
    }

    public class Singleton
    {
        private static  Singleton _instance = null;
        private static readonly  object _obj = new object();
        private static bool _initialize = false;

        private Singleton()
        {

        }

        public static Singleton GetInstance
        {
            get
            {
                ////第一种写法
                if (_instance == null) {
                    lock (_obj) {
                        if (_instance == null) {

                            _instance = new Singleton();
                            Console.WriteLine("Create a singleton instance!");
                        }
                    }
                }

                //第二种写法
                //if (!_initialize)
                //{
                //    lock (_obj)
                //    {
                //        if (!_initialize)
                //        {
                //            _instance=new Singleton();
                //            _initialize = true;
                //            Console.WriteLine("Create a singleton instance!");
                //        }
                //    }
                //}
                return _instance;
            }
        }
    }
}

上面就是单例常用写法。但实际项目开发当中,我们不能对每一个类都要写成单例,所以解决这种情况,我就需要一个容器来保持单例。

把需要单例的对象保存进去。

下面是代码:

    public class Singleton
    {
        private static readonly IDictionary<Type, object> allSingletons;

        static Singleton()
        {
            allSingletons=new Dictionary<Type, object>();
        }

        public static IDictionary<Type, object> AllSingletons
        {
            get
            {
                return allSingletons;
            }
        }
    }

    public class Singleton<T> : Singleton
    {
        private static T _instance;

        public static T Instance
        {
            get
            {
                return _instance;
            }
            set
            {
                _instance = value;
                AllSingletons[typeof (T)] = value;
            }
        }
    }

重头开始学23种设计模式:单例模式,布布扣,bubuko.com

时间: 2024-12-26 11:07:56

重头开始学23种设计模式:单例模式的相关文章

重头开始学23种设计模式:三大工厂(简单工厂,工厂方法,抽象工厂)

在开发当中我们经常会使用三个设计模式,来帮我们解决项目代码的可扩展性. 在简单工厂,工厂方法,抽象工厂这三个设计模式当中,代码其实都很简单,主要是要理解运用. 简单工厂: 简单工厂说白了,就是利用Switch根据传递的参数,进行实例化. 工厂方法: 工厂方法,为解决每次都去增加Swicth的简单工厂的升级.为每一个产品提供一个工厂类. 抽象工厂: 抽象工厂,我觉得也是对工厂方法的再次升级,工厂方法每次只能创作一个产品,而抽象工厂就是产品线的产品族. 总结下,从网上找到一个大牛的回复: 我认为不能

GOF 23种设计模式-单例模式

? 创建型模式: – 单例模式.工厂模式.抽象工厂模式.建造者模式.原型模式. ? 结构型模式: – 适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模 式. ? 行为型模式: – 模版方法模式.命令模式.迭代器模式.观察者模式.中介者模式.备忘录模 式.解释器模式.状态模式.策略模式.职责链模式.访问者模式. ? 常见的五种单例模式实现方式 – 主要: ? 饿汉式(线程安全,调用效率高. 但是,不能延时加载.) ? 懒汉式(线程安全,调用效率不高. 但是,可以延时加载.) –

23种设计模式(1):单例模式

转:http://blog.csdn.net/zhengzhb/article/details/7331369 ———————————————————————————————————————— 定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 类型:创建类模式 类图: 类图知识点: 1.类图分为三部分,依次是类名.属性.方法 2.以<<开头和以>>结尾的为注释信息 3.修饰符+代表public,-代表private,#代表protected,什么都没有代表包可

23种设计模式第一种(单例模式)

单例模式单例模式 ------------------------------------------------------------------------------------------------------- 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. -------------------------------------------------------------------------------------------------- 创建类模式

23种设计模式(一) 单例模式

单例模式 定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式是23种设计模式中最简单的一种,它有三个要素: 私有的构造方法 指向自己实例的私有静态引用 以自己实例为返回值的静态的公有的方法 单例模式根据实例化对象时机的不同分为两种:一种是饿汉式单例,一种是懒汉式单例.饿汉式单例在单例类被加载时候,就实例化一个对象交给自己的引用:而懒汉式在调用取得实例方法的时候才会实例化对象. 饿汉式单例 public class Singleton { private static

23种设计模式系列之单例模式

本文继续介绍23种设计模式系列之单例模式. 概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器

Java开发中的23种设计模式详解(转)

设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

0. Java开发中的23种设计模式详解(转)

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

23种设计模式全解析

一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 其实还有两类:并发型模式和线程池模式.用一个图片来整体描述一下: 二.设计模式的六大原则 总原则:开闭原则(Open C