如题(我的积分比较少,不好意思啦)

解决方案 »

  1.   

    如果一个类中有属性且类的方法还可以修改的话,用单例; 
    如果一个类中只有方法而没有属性(就像LZ的MD5类),或是有属性但方法只读它,那么有静态方法比较好; 
    一个类是否线程安全的一般都伴随着其属性的读写。单例顾名思义对外只产生一个实例,前提是得到实例后才能得到其方法。 
    况且单例模式适用于一些无状态的,线程安全的,工厂等模式情况下。 
    而静态方法则是在加载类的时候就会加载到的方法。无需new实例就能调用的静态方法如果不用到类属性的话,就是线程安全的 单例是返回唯一对象,对象内属性是共享的,大家都可以访问并改变
      

  2.   

    无论是单例还是静态函数,都有一个特点,就是他们在内存中只有一个实例,这意味着:
    1。使用过程中不需要再new实例化对象,开销很小
    2。这些类一般都是无状态的,函数谁调都一样
    因此,综合上上述,他们适合用于工具类。
    区别:
    1。构建实例化时间来说,静态函数在类加载就可以用,换句话说,是系统保证其实例的唯一性的。而单例,其实还是普通类,是程序来保证其内存的唯一性的,所以类的实例,要手动加载!注意,单例模式的创建过程是有点考功底的,特别是所谓的惰性初始化。用不好会弄巧成拙。
    2。单例和静态函数另外一个区别在于OO方面。静态函数由于其类加载就确定函数的特点,决定了他是真正的静态,就把他当成简单的工具类就ok了。而单例如上说的,由于其可以滞后实例化,所以他仍然可以用抽象,用子类。也就是说,仍然可以抽象一个工具单例,直到运行阶段才决定到底使用那个具体的子类单例!
    说的有点抽象把,我举个例子你可能就明白了。
    假设,我们有一个起瓶器,开酒瓶的。这个显然使用于单例或静态函数,因为他只有一个动作,就是开盖。
    但是我们知道。起瓶器有两种,开啤酒瓶的和开红酒的两个就不同。那我到底用哪个呢?
    这个时候,如果酒瓶也被抽象了。那显然,我们用单例比较合适。
    我抽象一个类,就是起瓶子器,然后有两个具体的子类实例,分别是啤酒起瓶器和红酒起瓶器,而这两个子类都可以做称单例。只有在运行时才决定,红酒就用红酒的单例起瓶器,啤酒就用啤酒起瓶器。明白了吧,不不懂给我留言。
    另外,http://www.1000100hui.com/bulletin/biggift.html还有优惠,可以上去看看