知识大全 在Java中应用设计模式之Singleton
Posted 知
篇首语:后悔过去,不如奋斗将来。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在Java中应用设计模式之Singleton相关的知识,希望对你有一定的参考价值。
在Java中应用设计模式之Singleton 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
基本概念 ingleton 是一种创建性模型 它用来确保只产生一个实例 并提供一个访问它的全局访问点 对一些类来说 保证只有一个实例是很重要的 比如有的时候 数据库连接或 Socket 连接要受到一定的限制 必须保持同一时间只能有一个连接的存在 再举个例子 集合中的 set 中不能包含重复的元素 添加到set里的对象必须是唯一的 如果重复的值添加到 set 它只接受一个实例 JDK中正式运用了Singleton模式来实现 set 的这一特性 大家可以查看java util Collections里的内部静态类SingletonSet的原代码 其实Singleton是最简单但也是应用最广泛的模式之一 在 JDK 中随处可见 简单分析 为了实现 Singleton 模式 我们需要的是一个静态的变量 能够在不创建对象的情况下记忆是否已经产生过实例了 静态变量或静态方法都可以在不产生具体实例的情况下直接调用 这样的变量或方法不会因为类的实例化而有所改变 在图 的结构中可以看到 uniqueInstance 就是这个独立的静态变量 它可以记忆对象是否已经实例化了 在静态方法 Instance 中对这个变量进行判断 若没有实例化过就产生一个新的对象 如果已经实例化了则不再产生新的对象 仍然返回以前产生的实例 > > 具体实施 实现 Singleton 模式的办法通常有三种 一 用静态方法实现 Singleton 这种方法是使用静态方法来监视实例的创建 为了防止创建一个以上的实例 我们最好把构造器声明为 private 这样可以防止客户程序员通过除由我们提供的方法之外的任意方式来创建一个实例 如果不把构造器声明为private 编译器就会自作聪明的自动同步一个默认的friendly构造器 这种实现方法是最常见的 也就是图 中结构的标准实现 public class Singleton private static Singleton s; private Singleton() ; /** * Class method to access the singleton instance of the class */ public static Singleton getInstance() if (s == null) s = new Singleton(); return s; // 测试类 class singletonTest public static void main(String[] args) Singleton s = Singleton getInstance(); Singleton s = Singleton getInstance(); if (s ==s ) System out println ( s is the same instance with s ); else System out println ( s is not the same instance with s ); singletonTest运行结果是: s is the same instance with s 这证明我们只创建了一个实例 二 以静态变量为标志实现 Singleton 在类中嵌入一个静态变量做为标志 每次都在进入构造器的时候进行检查 问题在于构造器没有返回类型 如果确定创建一个实例成功与否 一个方法是调用一个函数来检查创建是否成功 然后简单的返回一个来自静态变量的值 但是这样做是不优雅的 而且容易发生错误 比较好的做法是创建一个当创建了一个以上的实例时可以抛出异常的类 这个类仅仅是调用父类方法 好处是用了自己命名的异常类型 错误信息更加清晰: class SingletonException extends RuntimeException public SingletonException(String s) super(s); class Singleton static boolean instance_flag = false; // true if instance public Singleton() if (instance_flag) throw new SingletonException ( Only one instance allowed ); else instance_flag = true; // set flag for instance // 测试类 public class singletonTest static public void main(String argv[]) Singleton s s ; // create one incetance this should always work System out println ( Creating one instance ); try s = new Singleton(); catch (SingletonException e) System out println(e getMessage()); // try to create another spooler should fail System out println ( Creating o instance ); try s = new Singleton(); catch (SingletonException e) System out println(e getMessage()); singletonTest运行结果是: Creating one instance Creating o instance Only one instance allowed 可以看出 第一个实例顺利创建 第二个实例创建实抛出了我们自定义的异常 三 用注册器机制来创建 Singleton 首先用集合中的Hashtable 和Enumeration来实现addItem(Object key Object value) getItem(Object key) removeItem(Object key)等方法实现一个管理器 将key和value一一关联起来 客户程序员创建实例前首先用addItem方法进行注册 再用getItem方法获取实例 Hashtable中的key是唯一的 从而保证创建的实例是唯一的 具体实现限于篇幅不再细说 在Prototype模型的应用一文中我将会给出一个实现注册器的代码 用注册器机制来创建 Singleton模式的好处是易于管理 可以同时控制多个不同类型的Singleton 实例 cha138/Article/program/Java/gj/201311/27471相关参考
知识大全 23种设计模式的Java版--Singleton(单例)
23种设计模式的Java版--Singleton(单例) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
设计模式之Singleton(单态模式) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 摘要讨论
Singleton模式是一个较为简单的模式下面的代码就可以建立一个Singlton模式的例子这是一个写系统日志的类实际应用的意义在于在内存中只保存一个实例避免开辟多个功能相同的工具类实例而耗用系统
本篇文章是对php设计模式中的单例与多例设计模式的应用进行了详细的分析介绍需要的朋友参考下 单例(Singleton)模式和不常见的多例(Multiton)模式控制着应用程序中类的数量如
在Java中应用State设计模式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 对象的状态由各
最简单的设计模式学习:Singleton模式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 学习
Singleton设计模式的C#实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Singleto
.Net单例模式(Singleton) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!单例模式的意思
C#“Singleton”模式四种实现方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 大家一
知识大全 从C#的Singleton设计模式实现看.NETFramework特性对开发者的重要性
从C#的Singleton设计模式实现看.NETFramework特性对开发者的重要性 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布