您的位置:首页 > 其它

单例模式

2014-02-09 13:37 295 查看
单例模式,是设计模式中很常见的一种。因为其只有一个实例而节约了系统的开销,从而提高系统的性能。

在设计 JDBC的时候我曾这样构想:用单例模式实现。因为只有一个实例就可能出现一个情况:用户A请求的数据,被用户B取走了(明显的Bug)。让线程同步(加synchronized关键字)就是很好的办法。

但是,一个实例往往不能满足我们的需求。比如学校的选课系统,同时在线人数高达上千人。

我们可以尝试另一种思路——限例模式。

我对限例模式的灵感来自于EJB中的无状态Session
Bean。在讲无状态 Session Bean的时候有这样一段话:当用户访问EJB方法时,EJB容器会从对象池中取出来 一个实例为之服务,服务完了就放回对象池。当下一个 用户再访问EJB方法时,EJB容器有可能再次把该实例取出来为之服务。正因如此无状态Session
Bean只需要少量的实例就可以为成百上千的用户服务,大大提高系统的性能。

如图:


我们的实例不再是一个,而是限制了N个。这样既解决了单例不能满足实际需求的窘境,又提高了系统的性能。这种做法,就好像是超市的购物车,一天的客流量能达到上千人次,但超市为其提供100辆购物车就足以。

部分代码实现如下:

public class Demo{

         int i;

         private Demo demo[i]=null;

         private Demo(int num){

                   i=num;//动态的指定对象个数

         }

         private static Demo getDemo{

                   ……//提供一个遍历机制找到空闲的对象

                   return demo[i];//返回空闲的对象

         }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: