6

具象クラスが基本クラスから継承されず、パターンの全体的な機能が維持されるように、テンプレート メソッド パターンのバリアントを実装するにはどうすればよいでしょうか。継承できない理由は、別のクラスから継承する必要があり、多重継承が利用できないためです。

たとえば、次の Tempate メソッド パターンがあるとします。

public abstract class BaseClass {
    public void Alpha() {
        Beta();
    }

    public abstract void Beta();

    public void Gamma() {
        Delta();
    }

    public abstract void Delta();

}

public ConcreteClass : BaseClass {
    public override void Beta() {
        Gamma();
    }

    public override void Delta() {
        Console.WriteLine("Delta");
    }
}

...
var object = new ConcreteClass();
object.Alpha(); // will outout "Delta"

ConcreteClass が BaseClass を継承せずに同じ結果を得るにはどうすればよいですか?

4

2 に答える 2

4

基本クラスは、コンストラクターを介して注入されたインターフェイス (または他の型) に依存する可能性があります。テンプレート メソッドは、このインターフェイス/型のメソッドを使用して、パターンの望ましい結果を達成できます。

public class BaseClass 
{
    IDependent _dependent;

    public BaseClass(IDependent dependent)
    {
         _dependent = dependent;
    }

    public void Alpha() {
        _depdendent.Beta();
    }

    public void Gamma() {
        _depdendent.Delta();
    }

}

継承ではなく構成を効果的に使用します。

于 2013-07-17T07:56:11.490 に答える