首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在这种情况下,单例实例有意义吗?

在这种情况下,单例实例有意义吗?
EN

Stack Overflow用户
提问于 2017-03-06 20:44:37
回答 1查看 349关注 0票数 1

我知道这是程序员们非常争论的话题,我已经读到了很多关于单例模式的缺点和优点的文章。

不过,我还是想问一下单身模式。

我正在创建一个小型PHP框架,并且我在框架中处理Cookies的方式被卡住了。

预付:

框架为每个模块提供工厂功能,因此从外部看,不清楚实例是否为单例。

示例:

代码语言:javascript
代码运行次数:0
运行
复制
$db     = Framework::DB(); // always a new instance
$cookie = Framework::Cookie(); // singleton (maybe?)

My take:

提供一个单例cookie实例,该实例可用于修改cookie (set、delete、get):

代码语言:javascript
代码运行次数:0
运行
复制
class Cookie {
     public function set($name, $value) {

     }
}

我的推理是cookie是一个全局状态,您不能创建一个新的cookie环境-它总是由浏览器提供的。对我来说,实例化一个新的cookie类实例是没有意义的。

但也许我遗漏了什么。

从本质上说,我想知道是否有更好的解决方案(不使用单例模式),或者这是否是单例具有实际意义的情况之一。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-06 21:27:13

Singleton基本上意味着您只能创建一个类的一个实例,我个人不认为将其硬编码到一个类中有什么意义,因为一般来说,类是为了创建多个对象而创建的。

对于您的数据库示例来说,对于大多数只处理1个数据库的网站来说,应该是可以的。但是,如果将来您希望使用相同的API连接到外部数据库,怎么办?哦,你不能因为我实现了一个单例接口。

现在让我们来谈谈你的cookie例子,每个网站都有存储多个cookie的能力。为什么要创造一个单身的人呢?设计该类,以便$cookie2 = new Cookie('name')引用另一个cookie。是的,所有这些都可以通过一个类来完成,在这个类中,每次您需要解析一个名称来确定将其放入哪个cookie中。

很少有单例设计模式是有用的,至少在PHP中是这样。大多数人使用容器来存储引用到类的单个实例(基本上是单例)的变量。但是,可以将该容器更改为另一个容器,可能会更改为类似于引用不同数据库和不同cookie的测试环境,同时使用相同的API。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42635194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档