ホームページ > Java > &#&チュートリアル > ファクトリ メソッド設計パターンの理解

ファクトリ メソッド設計パターンの理解

王林
リリース: 2024-07-23 17:37:20
オリジナル
723 人が閲覧しました

Understanding the Factory Method Design Pattern

ファクトリ メソッド設計パターンの理解

問題

Factory Method パターンは、作成されるオブジェクトの正確なクラスを指定せずにオブジェクトを作成する必要性に対処します。これは、スーパークラスの複数のサブクラスがあり、特定の条件またはパラメータに基づいてオブジェクトの作成を特定のサブクラスに委任したい場合に便利です。

解決

ファクトリ メソッド パターンは、スーパークラスでオブジェクトを作成するためのインターフェイスを提供しますが、サブクラスは作成されるオブジェクトのタイプを変更できます。これにより、クライアント コードが具体的なクラスと直接やり取りするのではなく、ファクトリ インターフェイスと確実にやり取りできるようになるため、疎結合が促進されます。

長所と短所

長所

  • クライアント コードの分離: クライアント コードがオブジェクト作成用のインターフェイスまたは抽象クラスと連携できるようにし、柔軟性と保守性を促進します。
  • コードの再利用を促進します: サブクラスは、ファクトリ メソッドで定義された同じオブジェクト作成ロジックを再利用できます。
  • オープン-クローズド原則のサポート: オープン-クローズド原則に準拠し、既存のクライアント コードを変更せずに新しいサブクラスを追加できます。

短所

  • 複雑さ: 複数のサブクラスとファクトリ メソッドの導入により、さらに複雑さが生じます。
  • サブクラス化が必要: 各製品タイプには独自のサブクラスが必要であり、コードベース内のクラスの急増につながる可能性があります。
  • 単純なケースには適していません: 単純なシナリオでファクトリ メソッド パターンを多用すると、不必要な抽象化と複雑さが生じる可能性があります。

実際のアプリケーションの例

ファクトリー メソッド パターンの実践的な例は、ドキュメントを作成するためのフレームワークにあります。ドキュメントの種類 (PDF、HTML など) に応じて、対応するドキュメント ファクトリが、適切な書式設定と機能を備えたドキュメント オブジェクトを作成します。

Java のコード例

コード内のファクトリーメソッドパターン

java
// Product interface
public interface Document {
    void open();
    void close();
}

// Concrete Product 1
public class PDFDocument implements Document {
    @Override
    public void open() {
        System.out.println("Opening PDF document");
    }

    @Override
    public void close() {
        System.out.println("Closing PDF document");
    }
}

// Concrete Product 2
public class HTMLDocument implements Document {
    @Override
    public void open() {
        System.out.println("Opening HTML document");
    }

    @Override
    public void close() {
        System.out.println("Closing HTML document");
    }
}

// Creator interface
public interface DocumentFactory {
    Document createDocument();
}

// Concrete Creator 1
public class PDFDocumentFactory implements DocumentFactory {
    @Override
    public Document createDocument() {
        return new PDFDocument();
    }
}

// Concrete Creator 2
public class HTMLDocumentFactory implements DocumentFactory {
    @Override
    public Document createDocument() {
        return new HTMLDocument();
    }
}

// Client code
public class Client {
    public static void main(String[] args) {
        DocumentFactory factory1 = new PDFDocumentFactory();
        Document pdfDocument = factory1.createDocument();
        pdfDocument.open();
        pdfDocument.close();

        DocumentFactory factory2 = new HTMLDocumentFactory();
        Document htmlDocument = factory2.createDocument();
        htmlDocument.open();
        htmlDocument.close();
    }
}
ログイン後にコピー

以上がファクトリ メソッド設計パターンの理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート