2013-05-16 57 views
-2

这将更像是一个伦理问题,但我很好奇它。策略模式:实例还是Object.class?

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

假设下面的例子:

  • 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);

所以,创建一个实例并且将它传递,或越过类对象,并让该方法创建实例。什么是更好,更干净的方式?

performane?当然,在功能强大的服务器上,性能不会有太大的差别,但是那些只有少量资源和低速处理器的嵌入式系统呢?

+0

在Java中思考,我看不到一种StringSearch和IntSearch实现相同接口的方式,并允许'doSearch'将它们交替调用。 –

+0

我的例子可能不是最好的,但它仍然只是一个例子。乍一看,IntSearch完全没有必要;) – Korashen

回答

1

一个实例,当然。传递类将强制doSearch()方法使用反射策略对象进行实例化。这只有在所有类同意某些约定(如具有默认构造函数)的情况下才有效。

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

我不明白性能如何与此有关。

0

通过一个实例。你可能想要传入一个预先使用参数实例化的实例(例如数据库连接,比如说),而你不能通过传递这个类本身来实现。

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