允许用户更改类方法的最佳设计方法 - Delegates / Inheritance / Interface?

时间:2017-11-26 03:19:30

标签: c# design-patterns polymorphism

我写(df.Var2.diff() != 0).cumsum() ,为了简单起见,负责添加/删除/保留一组电影。电影实例有许多参数,如长度,颜色,类型等。class Movies还应允许用户拨打Movies,这将返回'最佳' 集中的电影。

假设我已经有两种选择最佳电影的方式(一种基于最高IMDB排名,另一种基于烂番茄)但我想允许用户添加新类型的决策算法(例如基于长度+例如,一年中的季节)。允许这样做的最佳设计是什么?

我的想法:

  1. 允许用户从Movie bestMovie()继承并覆盖bestMovie()。感觉就像是对继承的错误使用。
  2. 创建名为Movies的界面并实施MovieSelection。然后,用户可以添加class IMDBMovieSelectionclass SeasonMovieSelection然后,Ctor将Movies作为它将在MovieSelection中使用的参数获取 - 为#34;信号发送"创建对象感觉不对。我主要对象的方法
  3. 在调用bestMovie()时使用委托/匿名函数(类似于我对bestMovie(<anonymous function>)的使用) - 感觉不可扩展且难以维护,特别是如果函数很复杂的话。
  4. 提供使用部分课程扩展课程的能力 - 甚至不确定这是否是真正的选择
  5. 非常感谢这里的任何见解。我确定我不是第一个面对这个问题的人,但我不知道究竟要搜索什么。

    由于

1 个答案:

答案 0 :(得分:1)

我同意这不是继承的好选择(#1)。这听起来像是strategy pattern的一个很好的用例,它基本上只是意味着将算法封装在一个类中,以便可以随时换出。因此,也许您的Movie类使用默认策略(例如,最高IMDB评级)进行初始化,但可以根据用户选择动态更改。这最接近您的选项#2。使用基本上只是将消息中继到另一个对象的方法会让人觉得奇怪,但这会给你提供比继承更好的灵活性。