![]() |
浏览:11462007-11-20 15:48 来自彭成刚 : 单件模式,是啥,从字面上也看的出来吧,就是实体唯一。还有啥好的?应该属于推迟实例化吧。。 下面来看看官方是咋说的:单件模式确保一个类只有一个实例,并提供一个全局访问点。 就我看来,这斯的功效并不是啥子提高什么效率的,而是保证效率的。。 记得那是很久很久以前了。。在我还在研究数据库链接的时候。。睡眼朦胧,打开俺的.net项目,打开项目开始编程。 ......... 蒙蒙隆隆的我 睡着了。。醒来的时候已经是清晨了。。 看看项目还有2个小模块,顺手就写完了。。 打开首页,顺利编译,功能实现。。一宿的劳累没有白费,发布网站。。带着高兴的心情。。走出了办公室的大门。。 这时经理过来说客户打电话过来说网站极不稳定,打不了几个页面就报错了。我想不可能啊。。 几经排查,发现原来所有的模块,在 new db() 后,都没有 db.close() 。光首页调用这个就30多个模块,等于就开库30多次没关,刷3次首页,就相当与100次的开库不关,网站不报错才怪啊。。 于是在所有的模块里加上了db.close() ,可是能不能防患于未然呢。。毕竟我们都是人啊。。 隆重推出了我们的单件模式,当时如果使用了单件模式,等于最多的时候,也就是开了一条数据通道,等于就是开库1次而已,也不会造成那么大的性能损失了,当然,这可不是说你就不关库了。。嘿嘿。。 其实这个单件模式 简单的很。。他就是利用 private 将类的初始化私有,然后指定实例化方法GetInstance(动用静态变量),在GetInstance中看看如果第一次调用,就实例化,然后返回,如果已经有了这个对象了,就把对象返回。。 下面也没啥可说的了,给出 单件模式的 .Net 代码,这回自己懒得写了,直接从网上Copy下来了,总共就2行代码,不值当自己敲了。。嘎嘎。。这个是记录的日志的 单件类。。和我说的数据库连接 没有任何区别。。 困困的。。今天由于自己从新改版,就把网站数据全删了,传上去新的代码,发现数据库没有写权限了,于是就无所事事了。。也是这篇文章诞生的缘由吧。。 ( 俺小站zzcn.net ) 不要说俺广告哦。。 public class LogWriter { //申明一个静态的变量,类型为类本身 private static LogWriter _instance = null;
//将类的构造函数私有化,使得这个类不可以被外界创建 private LogWriter() { } //提供静态的方法,创建类的实例 public static LogWriter GetInstance() { if (_instance == null) { _instance = new LogWriter(); } return _instance; } } 楼主
|