-2

这更像是一个道德问题,但我很好奇。

所以,有策略模式,你有一个策略接口,有几个实现和一堆方法,把策略接口作为参数。

让我们假设以下示例:

  • Interface: SearchStrategy
  • Class: StringSearch implements SearchStrategy
  • Class: IntSearch implements SearchStrategy
  • etc.

然后有一个方法像

doSearch(String a, String b, SearchStrategy strategy)

您将如何处理策略对象?传递一个实例或类?

A:doSearch("Hello","World", new StringSearch());

或者

乙:doSearch("Hello","World", StringSearch.class);

因此,创建一个实例并传递它,或者传递 Class 对象并让该方法创建一个实例。什么是更好,更清洁的方法?

性能怎么样?当然,在功能强大的服务器上,性能不会有显着差异,但是只有少量资源和慢速处理器的嵌入式系统呢?

4

2 回答 2

2

当然是一个例子。传递类将强制doSearch()方法使用反射实例化 Strategy 对象。这仅在所有类都同意某些约定(例如具有默认构造函数)时才有效。

并且它不允许传递具有某种状态的策略(例如 caseSensitive 标志,或对另一个上下文对象的引用,或其他)。

我看不出性能与此有什么关系。

于 2013-05-16T12:57:05.107 回答
1

传递一个实例。您可能希望传入一个预先实例化了参数的实例(例如,一个数据库连接),而您不能通过传递类本身来做到这一点。

如果您希望代码创建新实例(然后,传递一个工厂)或者如果您想做一些反射类型的机制,我希望传递一个类,但这些场景很少而且相距甚远。

于 2013-05-16T12:56:39.300 回答