6 java oop model-view-controller design-patterns strategy-pattern
我有几个实现策略模式的Java类.每个类都有不同类型的可变数字参数:
interface Strategy {
public data execute(data);
}
class StrategyA implements Strategy {
public data execute(data);
}
class StrategyB implements Strategy {
public StrategyB(int paramA, int paramB);
public data execute(data);
}
class StrategyC implements Strategy {
public StrategyC(int paramA, String paramB, double paramC);
public data execute(data);
}
Run Code Online (Sandbox Code Playgroud)
现在我希望用户可以在某种UI中输入参数.应该在运行时选择UI,即策略应该独立于它.参数对话框不应该是单片的,并且应该有可能使它的行为和每个策略和UI看起来不同(例如控制台或Swing).
你会如何解决这个问题?
一种可能性是使用类似于 Builder 设计模式的东西:
对于每种策略类型,您都应该有一个相应的构建器(一个或多个)。该构建器不像普通构建器那样接收所有初始化参数作为方法参数;相反,它应该阻塞,直到收到相关输入。一些构建器将显示 Swing 对话框并等待,其他构建器将打印到控制台并等待输入,其他构建器可以从文件中读取等。构建器收到所有输入后,它可以创建策略实例并返回它。
通过这种方式,您可以将数据检索逻辑与策略本身分离。另一个好处是您可以拥有所有构建器的通用接口,因此一旦您选择了特定的构建器,您就可以使用同一段代码来操作它。