我知道这是程序员们非常争论的话题,我已经读到了很多关于单例模式的缺点和优点的文章。
不过,我还是想问一下单身模式。
我正在创建一个小型PHP框架,并且我在框架中处理Cookies的方式被卡住了。
预付:
框架为每个模块提供工厂功能,因此从外部看,不清楚实例是否为单例。
示例:
$db = Framework::DB(); // always a new instance
$cookie = Framework::Cookie(); // singleton (maybe?)
My take:
提供一个单例cookie实例,该实例可用于修改cookie (set、delete、get):
class Cookie {
public function set($name, $value) {
}
}
我的推理是cookie是一个全局状态,您不能创建一个新的cookie环境-它总是由浏览器提供的。对我来说,实例化一个新的cookie类实例是没有意义的。
但也许我遗漏了什么。
从本质上说,我想知道是否有更好的解决方案(不使用单例模式),或者这是否是单例具有实际意义的情况之一。
发布于 2017-03-06 13:27:13
Singleton基本上意味着您只能创建一个类的一个实例,我个人不认为将其硬编码到一个类中有什么意义,因为一般来说,类是为了创建多个对象而创建的。
对于您的数据库示例来说,对于大多数只处理1个数据库的网站来说,应该是可以的。但是,如果将来您希望使用相同的API连接到外部数据库,怎么办?哦,你不能因为我实现了一个单例接口。
现在让我们来谈谈你的cookie例子,每个网站都有存储多个cookie的能力。为什么要创造一个单身的人呢?设计该类,以便$cookie2 = new Cookie('name')
引用另一个cookie。是的,所有这些都可以通过一个类来完成,在这个类中,每次您需要解析一个名称来确定将其放入哪个cookie中。
很少有单例设计模式是有用的,至少在PHP中是这样。大多数人使用容器来存储引用到类的单个实例(基本上是单例)的变量。但是,可以将该容器更改为另一个容器,可能会更改为类似于引用不同数据库和不同cookie的测试环境,同时使用相同的API。
https://stackoverflow.com/questions/42635194
复制相似问题