1

実行時に動作が決定されるようにクラスを設計する必要があるという問題ステートメントがあります。

クラス階層は次のとおりです。

                       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 のインスタンスは、プログラムの存続期間中同じになります。

ケースに合わせて最適なデザインパターンをご提案。

4

3 に答える 3

2

Drvd-GenericStrategyパターンを実装し、DrvdA/ DrvdBetc の内部インスタンスを使用してその作業を行うことができます。

于 2012-09-05T07:44:46.253 に答える
1

type のメンバーがある場合、コンポジションを使用した戦略パターン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
}
于 2012-09-05T07:46:11.833 に答える
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
{
}

これがお役に立てば幸いです。

于 2012-09-07T11:02:41.787 に答える