设计模式之单例设计模式

  

,,,,保证一个类仅有一个实例,并提供一个访问它的全局访问点。

,,,,对一些类来说,只有一个实例是很重要的。虽然系统中可以有许多打印机,但却只应该有一个打印假脱机(打印机后台处理程序),只应该有一个文件系统和一个窗口管理器。一个数字滤波器只能有一个A/D转换器。一个会计系统只能专用于一个公司。

,,,,我们怎么样才能保证一个类只有一个实例并且这个实例易于被访问呢?一个全局变量使得一个对象可以被访问,但它不能防止你实例化多个对象。一个更好的办法是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建(通过截取创建新对象的请求),并且它可以提供一个访问该实例的方法。这就是S i n g l e t o n模式。

,,,,在下面的情况下可以使用S i n g l e t o n模式

当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。

当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

,,,,将来系统是高并发的,比如dbinfo,数据库信息放在配置文件里面,高并发作用是只读取一次配置文件。

,,,, dbinfo

,,,, servlet

,,,,监听器

,,,,过滤器

注:请求和响应不是单例对象。每个人访问的都是同一个servlet,但是不同在于,每个人的请求请求是不同的,请求对象是servlet容器创建的.request对象跟HTTP请求绑定在一起的,一个HTTP请求绑定一个请求。

应用程序是一个全局变量,也是一个单例对象。

S i n g l e t o n

-定义一个i n S t n c e操作,允许客户访问它的唯一实例。我n S t e n c是一个类操作(即

S m l l t l k中的一个类方法和c++中的一个静态成员函数)。

——可能负责创建它自己的唯一实例。

客户只能通过S i n g l e t o n的i n S t e n c操作访问一个S i n g l e t o n的实例。

<强>

写法一:

public  class  ConnectionFactory  {      private  static  ConnectionFactory 工厂,,,,,,,,,,,,,,,,,,,,,//单例对象   private  DbInfo  dbinfo;      private  ConnectionFactory (DbInfo  dbinfo) {   时间=this.dbinfo  dbinfo;   }      public  static  ConnectionFactory 实例(){   如果(factory ==, null) {   DbInfo  DbInfo =, DbInfo.instance ();   时间=factory  new  ConnectionFactory (dbinfo);   }   return 工厂;   }/* *   ,*打开一个数据库连接   ,* @return   ,*/public  DbConnection  openConnection () {   DbConnection 连接;   如果(this.dbinfo.getDriver () .equals(“甲骨文”)){   时间=connection  new  OracleConnection(工厂);   其他}{   时间=connection  new  MysqlConnection(工厂);   }      return 连接;   }      }

写法二:

public  class  ConnectionFactory2  {      private  static  ConnectionFactory2 工厂,,,,,,,,,,,,,,,//1。要有单例对象      private  ConnectionFactory2 () {      }      静态{      时间=factory  new  ConnectionFactory2 ();      }      public  static  DbConnection  openConnection () {      DbConnection 连接;      DbInfo  DbInfo =, DbInfo.instance ();   如果(dbinfo.getDriver () .equals(“甲骨文”)){   时间=connection  new  OracleConnection(工厂);   其他}{   时间=connection  new  MysqlConnection(工厂);   }      return 连接;      }   }

<强>

class 单身   {   ,,,private  static  final  Single  s =, new 单();   ,,,private 单(){}   ,,,public  static  Single  getInstance ()   ,,,{   ,,,,,,,return ;   ,,,}   }

class 单{   ,,,private  static  Single  s =,空;   ,,,private 单(){}   ,,,public  static , Single  getInstance () {   ,,,,,,,如果(s==null){,,,,,,//多重判断   ,,,,,,,,,,,同步(Single.class){,,,,//注意锁的用法   ,,,,,,,,,,,,,,,如果(s==null)   ,,,,,,,,,,,,,,,,,,,s =, new 单();   ,,,,,,,,,,,}   ,,,,,,,}   ,,,,,,,return ;   ,,,}   }

设计模式之单例设计模式