У меня есть постановка задачи, в которой мне нужно спроектировать классы таким образом, чтобы их поведение решалось во время выполнения.
Классовая иерархия выглядит следующим образом;
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 будет тем же самым в течение срока действия программы.
Предложите лучший шаблон дизайна для вашего случая.
Drvd-Generic
мог бы реализовать стратегия шаблон, и использовать внутренние экземпляры DrvdA
/ DrvdB
и т.д., чтобы сделать свою работу.
Выглядит как шаблон стратегии 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
}
Как насчет шаблон декоратора?
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
{
}
Надеюсь, это поможет вам.