0

これが工場出荷時のパターンかどうかについて、先生と少し議論しています。あなたの意見を聞いてもいいですか?

public class UrlFactory {
    private static boolean testMode;
    private static long testDate;

    public static URLConnection fetchConnection(String url) 
                                              throws IOException
    {
        URL address = new URL(url);

        if(testMode)
            return new MockURLConnection(address, testDate);
        return address.openConnection();
    }

    public static void SetTestMode(long testDate)
    {
        UrlFactory.testMode = true;
        UrlFactory.testDate = testDate;
    }

    public static void UnSetTestMode()
    {
        UrlFactory.testMode = false;
    }
}
4

2 に答える 2

12

構造的に工場に似ているように見えますが、工場のパターンのポイントが欠けていると言えます。理想的には、ファクトリはインスタンス化可能でオーバーライド可能です (たとえば、作成用の仮想メソッドがあります)。仮想メソッドUrlFactoryを持つ非静的クラスの設計をお勧めします。その後、オーバーライドして を返すfetchConnection派生クラスを持つことができます。MockUrlFactoryfetchConnectionMockURLConnection

例:

public class UrlFactory {
    public URLConnection fetchConnection(String url)
        throws IOException {
        URL address = new URL(url);
        return address.openConnection();
    }
}

public class MockUrlFactory extends UrlFactory {
    private long testDate;

    public MockUrlFactory(long testDate) {
        this.testDate = testDate;
    }

    public URLConnection fetchConnection(String url)
        throws IOException {
        URL address = new URL(url);
        return new MockURLConnection(address, testDate);
    }
}
于 2012-05-14T02:53:58.970 に答える
2

bobbymcr が指摘しているように、Factory パターンを実装するための、より優れた、よりオブジェクト指向の方法が確実に存在します。

ただし、それはあなたの例が Factory パターン自体の例であることを妨げるものではありません。

「デザイン パターン」という用語自体を定義するのは少し難しいことを覚えておいてください。つまり、ほとんどの「デザイン パターン」は、具体的な用語で定義することも何度も難しいということです。それらは通常、非常に一般的な用語で記述され、実装の詳細は開発者に任されています。実際、この一般性はまさにデザイン パターンの定義に組み込まれています。

この言語の要素は、パターンと呼ばれるエンティティです。各パターンは、私たちの環境で何度も発生する問題を説明し、その問題の解決策の核心を説明します。これにより、この解決策を 100 万回使用しても、同じ方法を 2 回実行する必要はありません。 .

定義が緩いため、多くの場合、デザイン パターンをめぐる議論は本質的に宗教に近いものになり、他の宗教と同様に、多くの熱狂者がいます。しかし、私が会った熱狂者のほとんどは、信仰に完全に固執しなくても、検討する価値のある確固たる主張をしています.

そうは言っても、私の宗教的立場はbobbymcrと同じです. ファクトリ メソッドは、サブクラスがオーバーライドするためのものです。

于 2012-05-14T03:04:29.183 に答える