【发布时间】:2016-01-15 23:18:16
【问题描述】:
我正在重构一些代码,我想要的是让该方法根据它正在执行的上下文执行额外的操作。
例如: 如果当前方法如下
public void func1() {
/// Operation Set 1
/// Operation Set 2
// Operation Set 3
// Operation Set 4
}
我希望它是这样的:
// After refactoring
punlic void func1() {
/// Operation Set 1
if( context == FULL || context == EXEC_REQUIRED )
{
/// Operation Set 2
if( context === EXEC_REQUIRED )
{
// Operation Set 3
// Operation Set 4
}
}
}
所以我只是想知道是否已经有任何设计模式?
目前我可以考虑2个解决方案
将上下文作为参数从调用者传递给方法,但如果我遵循这一点,那么我将不得不对调用堆栈中的所有函数进行更改,但这些函数可能不会使用此上下文。
将 ContextProvider 之类的东西定义为静态类。每当我们需要上下文信息时,请询问 ContextProvider。这里的问题是,应用程序是多线程的,所以静态似乎不是正确的想法。
如果您有任何解决方案,那将很有帮助。
【问题讨论】:
-
根据single responsibility principle,您所描述的可能不是最好的主意(从干净代码的角度来看)。我会尝试一种多态方法(例如,strategy pattern)。
-
我同意...但在我的情况下这是不可能的,因为一切实际上都发生在构造函数中(更准确地说是基础构造函数)。我提到的问题只是更简单的版本。所以我唯一的选择是以某种方式为这个构造函数提供上下文并使用 ifelse 逻辑。
-
这个问题让我想起了State pattern。
标签: design-patterns language-agnostic