首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在面向对象的程序中使用回调是一个很好的实践吗?

在面向对象的程序中使用回调是一个很好的实践吗?
EN

Stack Overflow用户
提问于 2012-08-25 10:49:24
回答 1查看 645关注 0票数 3

您在面向对象程序中使用回调的经验是什么?回调是否会导致代码质量更高(更容易理解、扩展和维护)?还是应该在面向对象代码中避免回调?

为了说明这个问题,请考虑以下两种方法,类可以通知它已完成异步任务处理(代码在C++中使用普通函数指针作为回调,但这些只是细节,问题是关于面向对象的实践):

  1. 定义用于通知的接口,并将实现此接口的对象传递给异步读取器: 类IReadFinishedListener {虚拟readDone() = 0;};类ReaderA { void asyncRead(IReadFinishedListener& readFinished);};
  2. 将回调传递给读者: 类ReaderB { void asyncRead(void (*readFinishedCallback)(void));};

从面向对象的角度看,第一种解决方案似乎更纯粹。您有一个显式定义的接口,它记录了实现接口的代码所做的事情。您可以很容易地找到实现接口的类,代码可以更容易理解。

第二种解决方案更轻量级,它不需要额外的接口,这通常很难设计和命名。它看起来也更灵活,因为它可以减少处理读取的类和在读取完成时通知的代码之间的耦合。但是,代码可能变得更难理解,因为没有明确的接口来记录哪些类可以处理通知。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-25 11:08:59

我认为第一个变体在OOP中更好,这就是为什么:

  1. 在面向对象( OOP )中,我认为对象是至高无上的,而不是行动,在这种意识形态下,当对象通过其他对象做某事时,似乎更正确。
  2. 您声明某个实体具有它自己的​​责任区域,并且您有能力灵活和简单地更改这个区域。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12121321

复制
相关文章

相似问题

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