直接用静态方法调用和单例模式的区别是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了直接用静态方法调用和单例模式的区别是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1882字,纯文字阅读大概需要3分钟。
内容图文
如题,静态方法是在内存中只初始化一次,而单例模式也是保证在内存中只实例化一个对象,那这两者的区别是什么?我直接把数据库链接放在静态里面不就行了吗回复内容:
如题,静态方法是在内存中只初始化一次,而单例模式也是保证在内存中只实例化一个对象,那这两者的区别是什么?我直接把数据库链接放在静态里面不就行了吗
一个可继承,一个不可继承。
其实没有搞明白题主想问什么。
单例模式是针对类的,静态方法是方法而已,跟对象没有直接联系。
当然不同,思考一点,静态方法里能用 this 吗?
实际上需要具体看类是做什么用的。
以题主的数据库连接作为例子(实际上很多实体都可以作为例子),具体要看把什么当成实体来分析设计:
例如,当我们认为网站是实体,那么把连接数据库这个事情当成网站的一个动作,就是在网站类中实现该静态方法。然而为了节省内存,我们以为这个静态方法在程序初始化时就载入,这样就节省了内存,实际上我们在使用连接数据库的时候仍然是调用了这个方法,仍然需要重新连接一次,在内存中仍然在重复造连接资源。
如果我们把数据库当成一个实体,那么连接数据库这种事情当然是由这个实体来办的,然而为了节省内存,我希望所有用到数据库实体的情况都只使用那个已存在的实例,而不是每次都去创建连接,这时候单例模式就发挥了作用。
那么把谁当成实体这种事情,当然是要看设计者具体应用到什么情况。
为了改善我提到的第一个例子的问题,我们可以在类内写一个静态变量用于存储连接资源:
class website {
private static $_conn = NULL;
public static function db_conn()
{
if (empty(self::$_conn))
{
$_conn = ...;//造一个连接
}
return $_conn;
}
}
这样就相当于类似的单例模式保持只有一个资源的情况了。
说了这么多,实际上在使用的时候还是单例模式方便,至少我们可以把对数据库的各种操作封装起来变成一个非常实用的工具类,需要的时候就载入,多好。
我在从内存上说说吧
static维护至少有且只有一份,单例至多维护有且仅有一份存
内存是有限的,如果把所有的单例都用static来替换,原则上没有问题,但内存会爆的。
单例只有在第一次使用的时候才会占有内存(或者堆栈什么的)
单例模式是针对类实例的,静态方法是属于类的方法。静态数据成员和单例有只初始化一次的特点,可以用静态成员来实现单例模式。
内容总结
以上是互联网集市为您收集整理的直接用静态方法调用和单例模式的区别是什么?全部内容,希望文章能够帮你解决直接用静态方法调用和单例模式的区别是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。