プロットのユースケース(および動的/静的のコンテキストまたは懸念)を提供していないのは残念です。ただし、ここではInterface
、Decorator
またはComposition over Inheritance (strategy pattern)
が適用されます。
インターフェース:
interface IPlot //this is optional
interface IDynamicPlot : IPlot
interface IStaticPlot : IPlot
// depending on context, the IPhasePlot can be defined as
// IDynamicPhasePlot inherited from IDynamicPlot. Same as for static.
interface IPhasePlot : IPlot
interface IRPMPlot : IPlot
class Plot : IPlot
class DynamicPlot : IDynamicPlot
//etc
戦略パターン:
導出されたプロットがDynamic
またはに依存している場合は、これを使用しStatic
ます。ファサードクラスとして機能します。
class DynamicRPMPlot{
IDynamicPlot dynamicPlot = new DynamicPlot(); //you can do constructor injection here
IRPMPlot rPMPlot = new RPMPlot(); //you can do constructor injection here
public void DoSomething(){
dynamicPlot.DoSomething();
// you can also migrate the implementation of RPMPlot to here,
//if it has different cases for dynamic or static
rPMPlot.DoSomething();
}
}
デコレータ パターン:
RPM
とdynamic
が分離されている場合は、これを使用します。
class RPMPlot : IRPMPlot {
RPMPlot(IPlot decorated){
// can place null guard here
this.decorated = decorated;
}
IPlot decorated;
public void DoSomething(){
decorated.DoSomething(); //you can change the sequence
//implementation of rpmplot
}
}
void ConsumePlot(){
IPlot plot = new RPMPlot(new DynamicPlot());
plot.DoSomething();
}