首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

学习 单例模式 札记

2012-10-11 
学习 单例模式 笔记单例模式:模式主要作用: 保证在Java应用程序中,一个类Class只有一个实例存在比如: 建立

学习 单例模式 笔记


单例模式:

模式主要作用: 保证在Java应用程序中,一个类Class只有一个实例存在
比如: 建立目录 数据库连接 都需要这样的单线程操作
一些大的应用程序中,主程序只需要有一个,因此需要使用单例模式


     我们常常看到 工厂模式 中类装入器(class loader)中也用Singleton模式实现的,
因为被装入的类实际也属于资源


优点:
    1,实例控制:单例模式防止其它对象对自己的实例化,确保所有的对象都访问一个实例。
    2,伸缩性:因为由类自己来控制实例化进程,类就在改变实例化进程上有相应的伸缩性。

=  节省内存  有利于Java垃圾回收


缺点:
1,系统开销。虽然这个系统开销看起来很小,但是每次引用这个类实例的时候都要进行实例是否存在的检查。
   这个问题可以通过静态实例来解决。


2,开发混淆。当使用一个单例模式的对象的时候(特别是定义在类库中的),
   开发人员必须要记住不能使用new关键字来实例化对象。因为开发者看不到在类库中的源代码,
   所以当他们发现不能实例化一个类的时候会很惊讶。

  
3,对象生命周期。单例模式没有提出对象的销毁。在提供内存管理的开发语言
  (比如,基于.NetFramework的语言)中,只有单例模式对象自己才能将对象实例销毁,
  因为只有它拥有对实例的引用。在各种开发语言中,比如C++,其它类可以销毁对象实例,
  但是这么做将导致单例类内部的指针指向不明。

--------------------------------
总结:
    单例模式 看起来简单,使用方法也很方便,但是真正用好,是非常不容易,
需要对Java的类,线程,内存等概念有相当的了解
 
/**
第一种单例模式 写法:
一般认为第一种形式要更加安全些
*/
public  class  SingleModel{
private static SingleModel instance = new SingleModel();

public  static  SingleModel  getInstance(){
  return instance;
}
}

/**第二种单例模式 写法*/
public class SingleModel{

private static SingleModel instance = null;

public  static synchronized Singleton getInstance(){
  if(instance == null){
   instance = new SingleModel();
  }
  return instance;
}
}






热点排行