我额外说了派生类和非子类。
我有一个基类和许多派生类。一个派生类应该在基类上调用一个方法,该方法再次在每个派生类上调用一个方法。
怎么可能?我应该采用什么样的设计模式来实施沟通
我使用MVVM设计模式驱动UI的控制器之间的“通道”?我知道调解员模式,但不喜欢它,因为它模糊了建筑的边界。
答案 0 :(得分:2)
这不是一个真正的设计模式,而是真正理解虚拟方法调用。假设我有一些东西:
public abstract class Foo
{
protected void DoFoo()
{
DoFooInternal();
}
protected abstract void DoFooInternal();
}
我有一个派生类:
public class Bar : Foo
{
protected override void DoFooInternal()
{
// Something here
}
}
在上面的示例中,对基类的DoFoo
的任何调用都会对派生类的DoFooInternal
方法进行虚拟调用。如果我想提供基线实现,我还可以将我的DoFooInternal
定义为虚拟:
protected virtual void DoFooInternal()
{
// Baseline implementation here
}
对于您的控制器,这将是相同的,您可以在ControllerBase
实例中指定一些公共共享逻辑并派生子控制器,例如PeopleController
,它可以发送对基类的方法调用,而基类又可以将调用发送回派生类中的虚方法......
答案 1 :(得分:1)
为了将责任从超类“委派”到其子类,您可能正在寻找Template Method Pattern。
它基本上正式化了使用抽象函数的概念(当然,子类必须实现)允许基类在其具体子类上调用函数。
答案 2 :(得分:0)
我认为命令模式最适合您的问题。如果您的情况是这样的:
然后最好的模式是命令模式。
这article可以给你一些想法
但我的建议是使用接口而不是基础派生类。
答案 3 :(得分:-2)
您可以使用Events在视图模型之间进行通信。 OR