C#OO设计:只需要一种抽象方法的情况

时间:2011-12-23 04:54:34

标签: oop design-patterns interface abstract-class virtual-method

我有2个类具有完全相同的逻辑/工作流,除了一种方法。

因此,我创建了一个抽象基类,其中不同的方法被声明为抽象。

下面是一些示例代码,用于演示我的设计;任何人都可以就更好的方法提出建议,还是我朝着正确的方向前进 我没有使用接口,因为派生类B和C字面上共享大部分逻辑。有没有更好的方法通过依赖注入来完成我在下面做的事情?

public abstract class A
{
    public void StageData()
    {
        // some logic
        DoSomething();
    }
    public void TransformData();
    public abstract DoSomething();
}

public class B : A
{
    public override void DoSomething()
    {
        // Do Something!
    }
}

public class C : A
{
    public override void DoSomething()
    {
        // Do Something!
    }
}

1 个答案:

答案 0 :(得分:3)

你所做的一切都没有错。在这个设计中引入依赖注入将是混乱和过度的 - 你必须传递一个委托:

public class ABC
{
    public ABC(Action z)
    {
        _doSomethingAction = z;
    }

    public void DoSomething()
    {
        _doSomthingAction.Invoke();
    }


    private Action _doSomthingAction;
}

您想要使用此方法的原因很少 - 如果您需要执行回调,则会出现这种情况。所以坚持你所拥有的模式,不要试图过度复杂化。