11

私はデザイン パターンについて学んでおり、本の最初の例は Abstract Factory に関するものです。VS で演習を作成しましたが、すべて問題ないように見えますが、疑問に思う点が 1 つあります。

この本では、ファクトリ クラスは次のように実装されています。

public abstract class AbstractVehicleFactory
{
    public abstract IBody CreateBody();
    public abstract IChassis CreateChassis();
    public abstract IGlassware CreateGlassware();
}

演習を完了した後、上記のクラスを次のコードに置き換えることができることに気付きました。

public interface IAbstractVehicleFactory
{
      IBody CreateBody();
      IChassis CreateChassis();
      IGlassware CreateGlassware();
}

もちろん、どちらの例もまったく同じように機能しますが、インターフェースではなく抽象クラスを使用する理由は何でしょうか?

4

4 に答える 4

9

abstract factory」の「abstract」は、「abstract」の「abstract」とは何の関係もありませんabstract class。抽象ファクトリは具体的なファクトリの「ベース」ですが、設計パターン自体は特定の実装を強制しません。抽象ファクトリは、使用する言語に応じて、抽象クラスまたは具象クラス、インターフェイス、または何らかの形式のダック型オブジェクトにすることができます。

実際、C#interfaceでは、Abstract Factory を指定する非常に合理的な方法です。

于 2013-09-17T02:49:49.080 に答える
7

抽象クラスは、注意して、中断しない方法で拡張できます。インターフェイスへのすべての変更は重大な変更です。

更新:
対照的に、インターフェイスはinまたはout型パラメーターにすることができますが、抽象クラスはできません。与えられたデザインに対して、どちらかがより適切な場合もあれば、トスアップである場合もあります。

于 2013-09-17T02:39:45.560 に答える