iteye_8561 2011-09-01 14:55
浏览 176
已采纳

singleton模式用类的静态方法和属性代替不行吗

单例模型目的只是为了实现一个类只能有一个对象这个功能。
我觉得通过设置类的静态方法,静态的属性同样可以实现这个功能啊。
他们直接没有什么本质区别吧。
为什么偏偏弄个对象出来干嘛?

  • 写回答

2条回答 默认 最新

  • AngelAndAngel 2011-09-01 15:08
    关注

    用类的静态方法确实可以办到单例模式的效果,但是他们是用在不同的环境下的,就好比用log可以打印出异常,用print也可以打印,但是不代表他们任何一个就没必要存在。
    具体来说呢
    1,单例类侧重与只有一个对象(注意,这里是有且只有),有的系统必须这个实例只有一个,但不能没有,那么你不能用静态方法来代替。比如说现在有个适配器系统,这个适配器有一个参数,必须是A类的对象,只要是A类对象或者是其子类的都可以,而这个对象呢在另外的地方也只能有同一个,那么此时你不能用静态方法代替。所以,在一些有相关设计模式需要用到对象,而这个对象又必须是唯一的,那么只能用单例模式了。
    2,静态类和单例类里面都可以把方法当作工具函数,这个时候可以互相代替。但是一般来说,为了考虑程序的通用性,除非有些非常固定的工具方法可以放在static里面。比如说,假如你做了一个xml配置文件,而且你在这个配置文件中可以配置本配置文件的解析类,这个时候你就不能配置静态方法了,而是配置成一个单例类,让单例类对象调用方法。

    这些都是平时的经验,做的越多自然更明白。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办