策略模式:实例还是Object.class?

时间:2013-05-16 12:53:28

标签: design-patterns instance

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

所以,有战略模式,你有一个战略界面,有几个实现和一堆方法,以战略界面为参数。

我们假设以下为例:

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

然后有一个像

这样的方法

doSearch(String a, String b, SearchStrategy strategy)

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

我不知道表演与此有什么关系。

答案 1 :(得分:0)

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

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