从父级到派生类的通信的设计模式

时间:2011-06-28 21:57:48

标签: c# .net design-patterns mvvm parent-child

我额外说了派生类和非子类。

我有一个基类和许多派生类。一个派生类应该在基类上调用一个方法,该方法再次在每个派生类上调用一个方法。

怎么可能?我应该采用什么样的设计模式来实施沟通

我使用MVVM设计模式驱动UI的控制器之间的“通道”?我知道调解员

模式,但不喜欢它,因为它模糊了建筑的边界。

4 个答案:

答案 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

MVVM Mediator Pattern