【发布时间】:2011-02-27 00:48:26
【问题描述】:
我想创建一个可以使用四种算法之一的类(并且要使用的算法仅在运行时才知道)。我在想策略设计模式听起来很合适,但我的问题是每个算法都需要稍微不同的参数。使用策略,但将相关参数传入构造函数,会不会是一个糟糕的设计?
这是一个例子(为简单起见,假设只有两种可能的算法)...
class Foo
{
private:
// At run-time the correct algorithm is used, e.g. a = new Algorithm1(1);
AlgorithmInterface* a;
};
class AlgorithmInterface
{
public:
virtual void DoSomething() = 0;
};
class Algorithm1 : public AlgorithmInterface
{
public:
Algorithm1( int i ) : value(i) {}
virtual void DoSomething(){ // Does something with int value };
int value;
};
class Algorithm2 : public AlgorithmInterface
{
public:
Algorithm2( bool b ) : value(b) {}
virtual void DoSomething(){ // Do something with bool value };
bool value;
};
【问题讨论】:
-
与其试图让你的代码适应一些预设的模式,不如设计它对你来说最清楚(希望对其他人最清楚)并且最容易维护。换句话说:设计模式很烂。如果你找到了解决问题的优雅方法,请使用它;它是否违反了一些任意的设计模式是无关紧要的。
-
另外,如果你再给我们一点(这些参数是如何传递的等等),我们可以给你一个更好的答案。但就像看起来一样,对我来说似乎是一个很好的解决方案。
标签: c++ inheritance design-patterns strategy-pattern