装饰静态类C#

时间:2017-11-07 14:54:13

标签: c# design-patterns decorator factory-pattern static-classes

我有一个设计问题。

我在一些旧代码中使用了静态类,它调用静态方法来运行某些操作。如果满足某个条件,我想在其后立即调用另一种方法。

我想使用装饰器模式,但是如果不满足条件,我就不能完全返回静态类的实例。

现在正在发生这种情况。

expect(anObject).toEqual({
  aSmallNumber: expect.expect('toBeLessThanOrEqual', 42)
})

我想要的是在DoSomething被调用之后立即写入数据库,如果另一个变量为true并且我不想仅仅使用条件语继续使用旧代码,那么我宁愿将其委托给其他类。这就是我真正想做的事情。

var result = StaticClass.DoSomething(some parameters);

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您可以使用界面来表示“实干家”:

public interface IDoer
{
    void DoSomething(object parameters);
}

然后创建两个类:

public class DefaultDoer : IDoer
{
    public void DoSomething(object parameters) 
    {
        StaticClass.DoSomething(object parameters);
    }
}

public class AugmentedDoer : IDoer
{
    public void DoSomething(object parameters) 
    {
        StaticClass.DoSomething(object parameters);
        DoSomethingElse();
    }
}

然后使用工厂根据条件返回实现IDoer的实例:

public class DoerFactory
{
    public IDoer GetDoer(object someCondition)
    {
        //Determine which instance to create and return it here
    }
}

我使用object类型的占位符来处理某些事情,因为没有更多信息可供使用。