对于继承层次结构中只有某些类需要某些字段或函数的情况,这是一个良好的结构

问题描述 投票:0回答:1

我想知道对于只有继承层次结构中的某些类需要某些字段或函数的情况,有一个好的结构。

我正在创建一个具有以下结构的程序:

class Singleton
{
   public int A{get; set;}
}

class Base
{
}

class SpecialFeatured : Base
{
   protected void Common(int a){ Singleton.A = a; }
}

class A : Base {}
class B : SpecialFeatured { public void Foo(){Common(3);} }
class C : SpecialFeatured { public void Foo(){Common(4);} }
class D : Base {}
class E : SpecialFeatured { public void Foo(){Common(5);} }
class F : Base {}
...

有一些特定的功能只有某些类(B、C、E)需要,我不喜欢那些不需要它们的类仍然可以访问它们。因此,我创建了一个继承自基类的

SpecificFeatured
类。但是,如果需要另一个特定功能(例如
SpecificFeature2
),这种方法可能会变得混乱。

此外,我使用单例类来全局存储值以供多个类引用,但这种结构似乎并不理想。

您有什么推荐的设计模式或结构吗?我特别想谈谈第一个问题。我想避免继承接口,因为继承它们的每个类都需要单独实现相同的功能。

oop inheritance design-patterns interface singleton
1个回答
0
投票

正如四人帮所写

优先考虑对象组合而不是类继承。

如果您只需要

Common
的可重用实现,为什么不拥有实现和公开该行为的类,例如

public sealed class Commoner
{
    public void Common(int a)
    {
        // Implementation goes here...
    }
}

要么在需要时创建此类的新实例,要么将其作为策略注入到需要它的类中。

根据OP,看起来这个类甚至不需要允许实例,但我怀疑这可能是一个XY问题

© www.soinside.com 2019 - 2024. All rights reserved.