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

本文关键字:通信 设计模式 派生 父类 | 更新日期: 2023-09-27 18:00:33

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

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

这怎么可能?我应该采用什么设计模式来实现通信

使用MVVM设计模式驱动UI的控制器之间的"通道"?我知道中介

模式,但不太喜欢它,因为它模糊了架构的边界。

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

这不是真正的设计模式,而是对虚拟方法调用的真正理解。假设我有东西:

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,它可以将方法调用发送到基类,而基类又可以将调用发送回派生类中的虚拟方法。。。

对于将责任从超类"委派"到其子类,您可能正在寻找模板方法模式。

它基本上是在形式化使用抽象函数的概念(当然,子类必须实现抽象函数),以允许基类在其具体子类上调用函数。

我认为命令模式最适合您的问题。如果你的场景是这样的:

  • 您有一个基类,它在所有派生类(客户端)中执行方法(命令)
  • 其中一个派生类调用该执行(调用程序)

那么最好的模式是命令模式。

这篇文章可以给你一些想法

但我的建议是使用接口而不是派生基类。

您可以使用Events在视图模型之间进行通信。或

MVVM中介器模式