【问题标题】:2 classes implement same interface and one derives from another2个类实现相同的接口,一个派生自另一个
【发布时间】:2023-04-05 09:33:01
【问题描述】:

我有一个界面:

Interface I
{
   void Update();
}

和 2 个实现它的类,A 和 B。 此外,这两个类在更新中使用相同的确切函数,但 B 稍后使用不同的代码:

Public class A : I
{
   public void Update()
   {
      someFunc();
   }
}

Public class B : I
{
   public void Update().    
   {
      someFunc();
      ....some B code...
   }
}

所以我想将 someFunc() 移动到 A 并让 B 从 A 继承,因为 B 做了 A 所做的事情加上其他事情。这个设计可以吗,因为感觉不行……或者你能建议更好的吗?

我想像在策略设计模式中一样保留接口,因为以后可能会出现 C 类,它将以与 A 和 B 完全不同的方式实现 I 接口。

【问题讨论】:

    标签: inheritance interface strategy-pattern


    【解决方案1】:

    仅将继承用于代码重用并不是一个好主意。仅当您真正创建 subtype 时才让 A 继承。在您的情况下,我将创建一个包含公共代码的抽象类。

    Interface I
    {
       void Update();
    }
    
    abstract class AbstractI : I
    {
       someFunc() {
          //implementation
       }
    }
    
    Public class A : AbstractI 
    {
       public void Update()
       {
          someFunc();
       }
    }
    
    Public class B : AbstractI 
    {
       public void Update().    
       {
          someFunc();
          ....some B code...
       }
    }
    

    (别管语法,我编的——只是伪代码)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 2010-09-22
      • 1970-01-01
      相关资源
      最近更新 更多