我有一个设计问题。
我在一些旧代码中使用了静态类,它调用静态方法来运行某些操作。如果满足某个条件,我想在其后立即调用另一种方法。
我想使用装饰器模式,但是如果不满足条件,我就不能完全返回静态类的实例。
现在正在发生这种情况。
expect(anObject).toEqual({
aSmallNumber: expect.expect('toBeLessThanOrEqual', 42)
})
我想要的是在DoSomething被调用之后立即写入数据库,如果另一个变量为true并且我不想仅仅使用条件语继续使用旧代码,那么我宁愿将其委托给其他类。这就是我真正想做的事情。
var result = StaticClass.DoSomething(some parameters);
有什么建议吗?
答案 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
类型的占位符来处理某些事情,因为没有更多信息可供使用。