Design patterns 策略模式:实例还是对象类?
这更像是一个道德问题,但我对此很好奇 因此,这里有一个策略模式,其中您有一个包含多个实现和一组方法的策略接口,以策略接口为参数 让我们假设以下内容作为示例:Design patterns 策略模式:实例还是对象类?,design-patterns,instance,Design Patterns,Instance,这更像是一个道德问题,但我对此很好奇 因此,这里有一个策略模式,其中您有一个包含多个实现和一组方法的策略接口,以策略接口为参数 让我们假设以下内容作为示例: 界面:搜索策略 Class:StringSearch实现搜索策略 Class:IntSearch实现搜索策略 等 还有一种方法是 doSearch(字符串a、字符串b、搜索策略) 您将如何处理策略对象?传递实例,还是传递类 答:doSearch(“你好”,“世界”,新StringSearch()) 或 B:doSearch(“你好”,“
界面:搜索策略
Class:StringSearch实现搜索策略
Class:IntSearch实现搜索策略
等
doSearch(字符串a、字符串b、搜索策略)
您将如何处理策略对象?传递实例,还是传递类
答:doSearch(“你好”,“世界”,新StringSearch())代码>
或
B:doSearch(“你好”,“世界”,StringSearch.class)代码>
因此,创建一个实例并传递它,或者传递类对象并让方法创建一个实例。更好、更干净的方法是什么
表演怎么样?当然,在功能强大的服务器上,性能不会有显著差异,但是对于只有少量资源和较慢处理器的嵌入式系统呢?传递一个实例。您可能希望传入一个使用参数预实例化的实例(例如,数据库连接),但不能通过传递类本身来实现
如果您希望代码创建新实例(但随后要传递工厂),或者希望执行某种反射类型的机制,那么我希望传递一个类,但这些场景非常少。当然是实例。传递该类将强制doSearch()
方法使用反射实例化Strategy对象。只有当所有类都同意某些约定(比如有一个默认构造函数)时,这才有效
而且它不允许传递具有某种状态的策略(比如区分大小写的标志,或者对另一个上下文对象的引用,等等)
我看不出性能与此有什么关系 在Java中,我没有看到StringSearch和IntSearch实现相同接口并允许doSearch
互换调用它们的方法。我的示例可能不是最好的,但它仍然只是一个示例。再看一眼,根本不需要IntSearch;)