静态方法和单件模式具体区别在哪里 ? 
http://community.csdn.net/Expert/topic/3300/3300427.xml?temp=.4662287
看了上面那位大哥的帖子以后,我也有点疑问 。
对于我的数据访问类如下 :
public class DBConst
{
public DBConst()
{
//
// TODO: 在此处添加构造函数逻辑
//
} public DataView select_const(string strComm)
{
SqlConnection myConn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["connectionString"]);
SqlDataAdapter myCommand=new SqlDataAdapter(strComm ,myConn);
DataSet ds = new DataSet();
myCommand.Fill(ds, "const");
return ds.Tables["const"].DefaultView;
}
}
对于这样的类 ,设计成工具类是不是更好 ?因为它并没有涉及到类的数据成员 ,那么设计成静态方法不是更好吗 ? 设计成静态方法就不用实例化 DBConst 类就可以调用数据访问方法select_const ( ) 了 。如果把上面的类不设计成静态方法 ,而是设计成单件模式 ,和上面的设计方法比较 ,那一种更好 ?
另:
对于 SqlConnection myConn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["connectionString"]);
这样的数据库连接操作 ,ADO.net 是自动的把连接放入到连接缓冲池中的 ,那么我如果连续执行select / update 等操作 ,每一个操作都要连接一次相同数据库 ,那么对于已经放到连接缓冲池中的连接 ,我要耗费的时间和资源还多吗 ?是不是要注意 ? 是不是最好把所有的select / update 等操作放到数据库存储过程中呢 ?(不是太想放到数据库存储过程中)

解决方案 »

  1.   

    1.工具类模式阎宏博士如果所有的方法都是静态的,那就根本不需要任何实例。有人把这种类叫做工具类,这种做法叫做工具类模式。工具类模式基本上不需要面向对象的概念。当然,我不是说面向对象的技术就一定比面向过程的好很多,但是如果你是在使用Java这样的面向对象的语言,设计一个面向对象的系统,那么一个单纯的想法就是尽量靠近面向对象的概念。我没有见过一个使用Java的人反其道而行之,努力使用面向过程的概念。如果你是面向过程概念的拥护者,不妨选择一个像Fortran这样的结构化编程语言。在大多数的情况下,工具类中的方法都描述一些实体,应该把这些方法移动到描述这些实体的类中去。如果没有这些类,那就不妨考虑创建它们。我曾经见到过一个很大的工具类,都是对String的操作。经过辨认,发现这些操作实际上都是为了组合URL准备的,并不是一般性地针对任何的String。为什么不把它们放到一个CustomizedURL类中去呢?当你这样做了之后,会发现你并不需要一个很大的工具类,或者根本就可以取消它。单例模式并不是一个取代工具类模式的好候选人。单例模式的情况在多JVM的J2EE服务器环境中变得很复杂。单例对象一旦创建出来就不会被湮灭,浪费内存。
    2.单例(Singleton)类模式2.1单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。单例是一个非常简单的模式,说白了就是在某个范围内(通常是内存)保持一个类的唯一的一个实例,作用保持实例的唯一性,常用类可防止频繁的new操作,比如全局配制类,Log等。Q: 如果用Singleton的话,对象永远只有一个,那如果是WEB程序,自然可能会承受很大的并发,这时候怎么处理?全部对这个对象操作?那不很容易乱套?如果锁上,就全部排队?是不是很不合适呢?
    RE: 模式是用来解决特定问题的,如果会产生并发问题,自然不应该用。Q: 静态方法和Singleton模式的区别 ?静态方法的设计原则,其实很简单,如果方法本身与实例无关。静态方法不属于对象,也就不是面对对象的设计了,一个类全是静态方法,还不如不设计这个类。单件模式的实例销毁时可以释放所有的非静态方法和数据,,如果把这个类的所有方法都设计为静态的,这些方法将一直占用内存,浪费资源,不可取。
      

  2.   

    to  jinglelin(碧海蓝天) 
    我们的数据库连接字符串就是一个组件 ?
    怎么设计啊 ? 能不能详细讲讲 ?
      

  3.   

    to angelface
    象楼主设计的那样的数据库访问类 ,好象不用实例化也可以作到想要的作用啊 ,而且设计成静态的方法省去了每次的实例化过程 。
      

  4.   

    试试看 Microsoft Application Block里面的DataAccess?我觉得不错,简单
    复杂的可以试试看NHibernate
      

  5.   

    看单件模式吓我一条,看完下文才知道就是Singleton,看了那么多Singleton,才知道中文叫单件模式