设计模式观察-Singleton

本篇先讨论单件 Singleton,单件的目标是保证一个类型只有一个实例,那么由谁来保证实例的唯一性呢?可能的方案有:

a)调用端保证。

调用端调用一个类时,他是不需要也不会去考虑这个类是否已经被实例化的。而且把这样的监管工作交给调用端是很不负责的做法。

b)类型内部保证。

类型内部如何保证?

将实例创建工作放到类型内部,这样类型就可以将实例创建工作监管起来。类型可以知道内部的实例有没有被创建,甚至可以知道创建实例的工作被执行了多少次。

所以个人认为理解单件需要分为两步:

1、监管工作谁来做?实例的监管工作需要类型自己去做。

2、监管工作如何做?类型如何保证实例唯一就是技术实现问题了,可以看到的版本有 线程安全的、双重锁定的、延迟初始化的等。

下面使用伪代码逐步分析实例化工作放到类型内部的做法。

调用我,实例我给你

class Singleton
     {
         Singleton Instance = null;
         // 实例化类型 Singleton
         Singleton GetInstance()
         {
             Instance = new Singleton();
             return Instance;
         }
     }

你只管调用,我保证唯一

class Singleton
     {
         Singleton Instance = null;
         //实例化类型 Singleton
         Singleton GetInstance()
         {
             Instance = new Singleton();
             return Instance;
         }
         // 实例化类型 Singleton,实例化时判断类型有没有被创建过,这样就保证了实例的唯一
         Singleton GetInstance()
         {
             if (Instance == null)
             {
                 Instance = new Singleton();
             }
             return Instance;
         }
     }

你们都可以调用,我需要统计调用次数

class Singleton
     {
         Singleton Instance = null;
         public int Count { get; set; }
         //实例化类型 Singleton
         Singleton GetInstance()
         {
             Instance = new Singleton();
             return Instance;
         }
         // 实例化类型 Singleton,实例化时判断类型有没有被创建过,这样就保证了实例的唯一
         Singleton GetInstance()
         {
             if (Instance == null)
             {
                 Instance = new Singleton();
             }
             return Instance;
         }
         // 实例化类型 Singleton,并且加入一个计数器,这样能知道实例化工作被执行了多少次
         Singleton GetInstance()
         {
             Count++;
             if (Instance == null)
             {
                 Instance = new Singleton();
             }
             return Instance;
         }
     }

时间: 2024-11-18 08:27:45

设计模式观察-Singleton的相关文章

设计模式之Singleton

设计 设计模式之SingletonSingleton定义:Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作. 还有, singleton能够被状态化; 这样,多个单态类在一起就可以作为一个状态仓库一样向外提供服务,比如,你要论坛中的帖子计数器,每次浏览一次需要计数,单态类能否保持住这个计数,并且能synchronize的安全自动加1,如果你要把这个数字永久保存到数据库,你可以在不修改单态接口

设计模式笔记 Singleton 单例模式

单例模式大概是最直观的一种设计模式了,尽管直观却不简单. 数学与逻辑学中,singleton定义为"有且仅有一个元素的集合", 单例模式可以如下定义:"一个类有且仅有一个实例,并且自行实例化向整个系统提供". 我比较喜欢Design Patterns 一书中的描述"保证一个类仅有一个实例,并提供一个访问它的全局访问点". 单例模式的特点 1.单例类只能有一个实例 2.单例类必须自己自己创建自己的唯一实例 3.例类必须给所有其他对象提供这一实例 单

php设计模式——单例模式(Singleton)的常见应用场景

单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此有些设计大师并把把其称为设计模式之一. 这里又不具体讲如何实现单例模式和介绍其原理(因为这方便的已经有太多的好文章介绍了),如果对单例模式不了解的可以先看下:http://terrylee.cnblogs.com/archive/2005/12/09/293509.html .当然也可以自己搜索.

解读设计模式----单例模式(Singleton Pattern)

单例模式可以保证一个类有且只有一个实例,并提供一个访问它的全局访问点.在程序设计中,有很多情况需要确保一个类只能有一个实例.从这句话可以看出,Singleton模式的核心:如何控制用户使用new对一个类的实例构造器的任意调用.如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?这应该是类设计者的责任,而不是使用者的责任. 一.单例模式意图 保证一个类有且只有一个实例,并提供一个访问它的全局访问点. 二.单例模式UML图(该图来至http://www.dofactory.com/) 三.示

在Java中应用设计模式之Singleton

基本概念 ingleton 是一种创建性模型,它用来确保只产生一个实例,并提供一个访问它的全局访问点.对一些类来说,保证只有一个实例是很重要的,比如有的时候,数据库连接或 Socket 连接要受到一定的限制,必须保持同一时间只能有一个连接的存在. 再举个例子,集合中的 set 中不能包含重复的元素,添加到set里的对象必须是唯一的,如果重复的值添加到 set,它只接受一个实例.JDK中正式运用了Singleton模式来实现 set 的这一特性,大家可以查看java.util.Collection

在Java中应用设计模式--Singleton

设计 本文介绍了设计模式中 Singleton 的基本概念,对其功能和用途进行了简单的分析,列出了通常实现 Singleton 的几种方法,并给出了详细的Java 代码. 基本概念 Singleton 是一种创建性模型,它用来确保只产生一个实例,并提供一个访问它的全局访问点.对一些类来说,保证只有一个实例是很重要的,比如有的时候,数据库连接或 Socket 连接要受到一定的限制,必须保持同一时间只能有一个连接的存在.再举个例子,集合中的 set 中不能包含重复的元素,添加到set里的对象必须是唯

转:设计模式Singleton(例子是C#的)

设计模式之Singleton-------------------------------------------------------------------------------- 引言相信大多数拜读过"Gang Of Four"(Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides)的经典之作<Design Pattern>的同僚们,对这本书一定推崇有加.曾有人这么宣告:"只有在读过<De

JavaServer Faces框架使用的设计模式

server|设计 本文中,作者 Anand Joshi 使用 JSF 框架中的设计模式阐释了 JavaServer Faces (JSF) 体系结构.他讨论了 JSF 体系结构中使用的 GoF 设计模式,以及这些模式在 JSF 框架中的作用.任何对设计模式和 JSF 体系结构有一定了解的人都能从 Anand 详细的介绍中有所收获.*读者应该对 GoF 设计模式和 JSF 技术有很好的了解. 设计模式可以帮助用户在更高层次上抽象细节,更好地理解体系结构.如果比较熟悉 GoF 设计模式和 Java

探索JSF框架中使用的设计模式

js|设计 设计模式可以帮助用户在更高层次上抽象细节,更好地理解体系结构.如果比较熟悉 GoF 设计模式和 JavaServer Faces (JSF) 框架,本文可以帮助您洞察 JSF 框架中使用的设计模式,深入理解其工作原理. 本文探讨了 JSF 框架中使用的设计模式.详细讨论的设计模式包括 Singleton.Model-View-Controller.Factory Method.State.Composite.Decorator.Strategy.Template Method 和 O