java设计模式之单例模式
来源:互联网 发布:阿里企业邮箱465端口 编辑:程序博客网 时间:2024/05/17 00:07
单例模式是最为简单地一种模式,其定义为:Ensure a class has only one instance, and provide a global point of access to it. 一句话就是说,确保某一个类仅仅只有一个实例化对象,并提供全局访问接口。
一个符合单例模式的类,其类图通常如下:
public class Singleton { private static final Singleton singleton = new Singleton(); //私有化构造方法 private Singleton(){ } //类中其他功能代码,尽量采用static 方式 public static void doSomething(){ } //返回该类实例化对象 public static Singleton getInstance(){ return singleton; }}
其特点在于:
- 类的实例对象在类内部完成(最好在初始化时完成)
- 私有化类的构造方法,不允许外部构造类的实例
提供静态方法供外部获取实例对象
另外,单例模式还有另外一种线程不安全的实现方式如下,之所以说其线程不安全,是考虑到系统压力增大,当有多个线程同时获取该类尚未实例化的对象时,部分线程可能刚执行到判断对象为空,准备新建一个新的对象,而在这之前一丢丢,有部分线程刚执行完这个判断,这个时候他们正准备新建对象。这种情况下,就会出现系统同时会创建多个类的对象。当然,开发者可以通过Sychronized关键字实现同步,避免这个问题。然而这就麻烦了。
public class Singleton { private static Singleton singleton = null; public static int i = 0; //私有化构造方法 private Singleton(){ } //类中其他功能代码,尽量采用static 方式 public static void doSomething(){ } //将类的实例化,放到首次调用获取实例时 public static Singleton getInstance(){ if (null == singleton) singleton = new Singleton(); return singleton; }}
单例模式的最佳实现方式还是第一种,在对象初始化获得其实例对象。考虑这种思路,我们也可以实现“二例”、“三例”乃至“N例”模式,即在初始化时,获得一个对象数组或队列,通过改写getInstance()方法,提供对对象池中的对象可控访问接口。
单例模式,说到底,就是使整个系统中该类的实例对象仅有同一个。其优势也显而易见,占用系统资源少,全局共享。一般用于需要频繁创建和销毁某种对象时。
对于上图中的,doSomething()方法,即类中其他业务代码尽量采用static的方式实现,是书作者的观点。个人认为,在不采用静态方法也能实现的情况下,由于静态方法或者说静态变量在整个系统初始化时,将在JVM永久区内存(参见JVM内存分配原理)中获得内存空间,基于这样的考虑,我认为过多的采用static方式,将削弱单例模式在系统资源占用方面的优势作用。更何况,对于公共静态方法,我们本就能采用类名直接访问,而且还不会新建对象实例,在这种情况下,单例模式更像是一种累赘。当然,这些只是基于我个人目前的认知,有其他观点,欢迎提出共同探讨。
- java设计模式之单例模式
- Java模式设计之单例模式
- Java模式设计之单例模式
- Java模式设计之单例模式
- java设计模式之单例模式
- Java模式设计之单例模式
- Java模式设计之单例模式
- Java设计模式之单例模式
- Java设计模式之单例模式
- Java设计模式之单例模式
- Java设计模式之单例模式
- Java模式设计之单例模式
- java设计模式之单例模式
- java设计模式之单例模式
- java设计模式之单例模式
- java设计模式之单例模式
- java设计模式之单例模式
- java设计模式之单例模式
- GROUP BY...WITH ROLL UP 分组统计后的再合计
- 线段树 1212. [NOIP2010冲刺十二] 奶牛排队
- libsvm使用
- bzoj1082: [SCOI2005]栅栏
- mysql查看表结构命令
- java设计模式之单例模式
- python调用linux系统命令
- json格式的数据
- mysql 基本命令
- Q_PROPERTY
- iOS - 字符串操作for遍历
- JavaScript强化教程—— 内置粒子系统
- 超星慕课 尔雅 通识课 题库 答案 免费查询 尔雅通识课 题库
- 构造 D - Finals in arithmetic ★ ★