我有一个问题陈述,我需要设计类,以便在运行时决定行为。
班级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的实例对于程序的生命周期将是相同的。
建议最合适的设计模式以适应案例。
答案 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)
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
{
}
希望这会对你有所帮助。