我知道这是程序员中一个备受争议的话题,我已经阅读了很多关于单例模式的缺点和优点。
我仍然想问一下单身人士模式。
我正在创建一个小型的PHP框架,而且我在我的框架中处理Cookie时遇到了困难。
前期:
框架为每个模块提供工厂函数,因此从外部不清楚实例是否是单例。
示例:
$db = Framework::DB(); // always a new instance
$cookie = Framework::Cookie(); // singleton (maybe?)
我的观点:
提供一个单独的cookie实例,可用于改变cookie(set,delete,get):
class Cookie {
public function set($name, $value) {
}
}
我的理由是,Cookie是一种全局状态,您无法创建新的Cookie环境 - 它始终由浏览器提供。 对我来说,实例化一个新的cookie类实例毫无意义。
但也许我错过了什么。
基本上我想知道是否有更好的解决方案(不使用单例模式),或者这是单身实际上有意义的情况之一。
答案 0 :(得分:2)
Singleton基本上意味着你只能创建一个类的实例,我个人没有看到硬编码到一个类的重点,因为一般来说一个类是创建的东西,所以你可以创建多个对象。
对于您的数据库示例,对于大多数仅处理1个数据库的网站,它应该没问题。但是如果将来要使用相同的API连接到外部数据库呢?哦,你不能,因为我实现了单一界面。
现在让我们来谈谈你的cookie示例,每个网站都能够存储多个cookie。为什么要创建一个单例?设计该类,以便$cookie2 = new Cookie('name')
引用另一个cookie。是的,它可以用1个类完成,一个单例,每次你需要解析一个名字来确定放入它的cookie。
单例设计模式很少有用,至少在PHP中是这样。大多数人使用容器来存储引用类的单个实例(基本上是单例)的变量。但是,对于另一个容器,可以更改该容器,可能是在使用相同API时引用不同数据库和不同cookie的测试环境。