RT,
觉得在写web应用的时候基本上用到的class都是logic处理、操作,像是function的集合,这样的class需要单例以节省内存
ORM中返回的查找数据class不需要单例,一条数据是一个object,这样的class像是 c 中的struct ,像是class表现出来的数据集合
求各位大大高见!!!! :)
单例,顾名思义,就是只有一个实例。
如果为现实建模,那么太阳、宇宙……就是单利。
看你的提问,说的是 web。那么,在 web 中,那些只有一个实例的,就是单利。
比如:
- 整个网站的全局设置。不管在哪个页面,哪个函数,哪个时刻,只要获取
GlobalSetting
,都是唯一的实例,不会存在第二个。 - 数据库。Database 一般是单利,虽然我们可以有 N 个 Database 的连接,但是数据库连接是个非常耗时耗资源的操作,所以,主流 web 框架将 Database 设计为单利。
写web应用的时候基本上用到的class都是logic处理、操作,
杀鸡焉用牛刀,任何设计模式都是为了更好的开发大型的、多人参与的、持久运行并维护的项目。如果是页面逻辑,那么前端控制器 FrontController
就应该是单利,然后将请求通过路由分配给其它的控制器。
在 ActionController
中,是业务逻辑,根据不同的业务,合理设计类。
像是function的集合
如果你的项目仅仅是function的集合,要么是你的项目太小,要么是你的项目代码需要重构。
如果真的是个别的 Utilities 类,就像 @mcfog 回答的,设计成静态类。
PHP的话,大概有几种场景
- 所谓function的集合“Utility”,还有表示一个CGI的执行过程的“Controller”等,这些概念本身不拥有数据也不拥有资源,单例都可能没必要,考虑public static
- 数据库连接对象、全局配置、资源池等拥有全局可复用的数据或资源,这是单例的最佳应用场景
- ActiveRecord对象,curl请求对象,数据库Query对象等拥有数据或资源且无法/无需全局复用,不能用单例
不知道你说的是不是php,
php里的的数据库或缓存,
如果不是单例,每次实例化都会连接一次资源,很耗时的,
如果改成单例,就只连一次了。
像php这种语言,每次请求后,资源都回收了,所以单例子的意义并不大。