建议最合适的设计模式

时间:2012-09-05 07:41:03

标签: c++ design-patterns

我有一个问题陈述,我需要设计类,以便在运行时决定行为。

班级heirarchy如下;

                       Base
          ______________|________________
         |           |        |         |      
       Drvd-A     DrvdB     DrvdC   Drvd-Generic  

“Drvd-Generic”类型的实例原则上应该在运行时继承任何类“Drvd-A”,“Drvd-B”或“Drvd-C”的行为。

实例“Drvd-Generic”的行为将在运行时决定,也可以在运行时更改。 例如;     - 创建实例Drvd-Generic;     - 在特定时间和特定条件下,Drvd-Generic应继承Drvd-A的行为;     - 在解决一些更改之后,Drvd-Generic应该继承Drvd-B的行为;

这将在某些条件出现时在运行时发生,Drvd-Generic的实例对于程序的生命周期将是相同的。

建议最合适的设计模式以适应案例。

3 个答案:

答案 0 :(得分:2)

Drvd-Generic可以实施Strategy模式,并使用DrvdA / DrvdB等内部实例来完成其工作。

答案 1 :(得分:1)

看起来像策略模式 w /组合可行,你有一个Behavior类型的成员。 (伪代码如下)

class Behavior
{
   virtual execute() = 0;
}
class BehaviorA
{
   virtual execute();
}
//and others

class Base
{
   Behavior* behavior;
}
class Drvd-A : Base
{
   //set behavior to BehaviorA
}
//and others
class Drvd-Generic
{
   //set & change behavior at runtime
}

答案 2 :(得分:0)

decorator pattern怎么样?

interface Base
{
//This is the interface which specifies the members
}
class Drvd-Generic : Base
{
//This implements the base class
}
class DrvdA : Base
{
//This class has a member of type Drvd-Generic
//The constructor accespts the Drvd-Generic object
//This can define DrvdA specific functions to further work on it.
//Basically this is the decorator class.
//As are DrvdB and DrvdC
}
class DrvdB : Base
{
}
class DrvdC : Base
{
}

希望这会对你有所帮助。