我想知道在实施策略设计模式时使用委托与OOP有什么优点/缺点?委托与OOP的C#策略设计模式
您推荐使用哪一个?或者委托人解决什么样的问题?如果OOP更好,我们为什么还要使用OOP?
谢谢!
-step
我想知道在实施策略设计模式时使用委托与OOP有什么优点/缺点?委托与OOP的C#策略设计模式
您推荐使用哪一个?或者委托人解决什么样的问题?如果OOP更好,我们为什么还要使用OOP?
谢谢!
-step
这两种技术都可以是强大而有价值的 - 下面是关于何时使用哪些技术的一些看法。
使用一个接口/实施方法时的策略:
否则,倾向于使用基于Func键<>或行动<>的代表,特别是如果
我喜欢用一个接口来抽象我的策略。然后我的具体实现为每个策略都有一个可见文件。当使用类而不是方法时,它会给你更多的灵活性。我可以使用Rhino mock来模拟策略来测试它。我也可以很容易地使用Ninject等DI框架来很容易地绑定策略应用。我使用委托来提取主要在WinForm对话框中的实现。
在现有的方法代表们的青睐:
赞成的接口:
可能会有两种结果:
我个人是代表们的灵活性的忠实粉丝,但它真的取决于情况。
在我看来,如果你使用代表,那么你实际上并没有实现Strategy pattern。你实际上正在实施更类似于Observer pattern的东西。设计模式的重点在于,当你说“我在这里使用了战略模式”时,每个人都对你所做的事情有很多背景。当你开始说“我已经使用了战略模式,除了我自己的个人修改”,那么事情就会变得渺茫。
但是,如果我明白你在说什么,那么关于策略模式的好处之一就是代表不太清楚,你可以有一个实现策略的对象层次结构。
假设我正在测试一些软件。我想用鼠标和键盘进行测试。因此,我将实施策略模式以插入用于每个测试用例的接口方法...因此,我可以编写一次测试用例,并使用MouseStrategy和KeyboardStrategy完全运行测试用例。从那里我可以实现专门化,如MouseExceptForDialogsStrategy,MouseStrategy的专业化。任何熟悉OOP概念的人都可以很容易地理解这种层次结构,如何扩展它并覆盖它,而如何实现和扩展与代表相同的结构则更为复杂和更加晦涩。
与许多事情一样......它不是“你能做到吗?”的问题,而是“你应该做到吗?”。