5つのWebサービス(加算、マイナス、除算、乗算、比較)を使用するためにC#で記述された単純なクラスライブラリ(COM +サービス)があります。
抽象製品クラスと抽象ファクトリクラスを作成しました。WSのコードという名前の抽象的な製品:
public abstract class WS
{
public abstract double Calculate(double a, double b);
public abstract string Compare(double a, double b);
}
ご覧のとおり、サブクラスの1つがWSを継承する場合、両方のメソッドをオーバーライドする必要があります。これは、一部のサブクラスでは役に立たない場合があります。たとえば、 CompareはCalculate()メソッドを必要としません。
新しいCompareWSオブジェクトをインスタンス化するために、クライアントクラスは、WSオブジェクトタイプを返すCreateWS()メソッドを呼び出します。
public class CompareWSFactory : WSFactory
{
public override WS CreateWS()
{
return new CompareWS();
}
}
ただし、Compare()がWSで定義されていない場合、Compare()メソッドを呼び出すことはできません。これは、クライアントがCompareWSオブジェクトではなくWSタイプのオブジェクトを使用するためです。
これは2つのメソッドの例にすぎませんが、さらにメソッドがある場合はどうなりますか?WSクラスですべてのメソッドを抽象として定義するのはばかげていますか?
私の質問は、WSのすべてのサブクラスに共通の抽象メソッドを定義したいのに対し、ファクトリがWSオブジェクトタイプを作成すると、サブクラスのすべてのメソッドを呼び出すことができます(WSのオーバーライドされたメソッドとサブクラスのメソッド)。これはどのようにすればよいですか?