在面向对象编程中在使用到class的时候哪些class需要单例实现,哪些class不需要?

发布于 2022-08-30 16:12:02 字数 192 浏览 22 评论 0

RT,
觉得在写web应用的时候基本上用到的class都是logic处理、操作,像是function的集合,这样的class需要单例以节省内存
ORM中返回的查找数据class不需要单例,一条数据是一个object,这样的class像是 c 中的struct ,像是class表现出来的数据集合


求各位大大高见!!!! :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

埋情葬爱 2022-09-06 16:12:02

PHP的话,大概有几种场景

  • 所谓function的集合“Utility”,还有表示一个CGI的执行过程的“Controller”等,这些概念本身不拥有数据也不拥有资源,单例都可能没必要,考虑public static
  • 数据库连接对象、全局配置、资源池等拥有全局可复用的数据或资源,这是单例的最佳应用场景
  • ActiveRecord对象,curl请求对象,数据库Query对象等拥有数据或资源且无法/无需全局复用,不能用单例
一桥轻雨一伞开 2022-09-06 16:12:02

不知道你说的是不是php,
php里的的数据库或缓存,
如果不是单例,每次实例化都会连接一次资源,很耗时的,
如果改成单例,就只连一次了。
像php这种语言,每次请求后,资源都回收了,所以单例子的意义并不大。

高跟鞋的旋律 2022-09-06 16:12:02

单例,顾名思义,就是只有一个实例

如果为现实建模,那么太阳、宇宙……就是单利。

看你的提问,说的是 web。那么,在 web 中,那些只有一个实例的,就是单利。

比如:

  1. 整个网站的全局设置。不管在哪个页面,哪个函数,哪个时刻,只要获取 GlobalSetting,都是唯一的实例,不会存在第二个。
  2. 数据库。Database 一般是单利,虽然我们可以有 N 个 Database 的连接,但是数据库连接是个非常耗时耗资源的操作,所以,主流 web 框架将 Database 设计为单利。

写web应用的时候基本上用到的class都是logic处理、操作

杀鸡焉用牛刀,任何设计模式都是为了更好的开发大型的、多人参与的、持久运行并维护的项目。如果是页面逻辑,那么前端控制器 FrontController 就应该是单利,然后将请求通过路由分配给其它的控制器。

ActionController 中,是业务逻辑,根据不同的业务,合理设计类。

像是function的集合

如果你的项目仅仅是function的集合,要么是你的项目太小,要么是你的项目代码需要重构。

如果真的是个别的 Utilities 类,就像 @mcfog 回答的,设计成静态类。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文