デザインパターン2ファクトリーメソッドパターン

ファクトリーメソッドパターンとは

製品クラス、ファクトリインターフェイス、およびファクトリインターフェイスを実装するファクトリクラスがあります。製品オブジェクトの作成は、ファクトリクラスに依存して作成されます。核となるのは、創造と使用の分離です。

「「

オブジェクトを作成するためのインターフェイスを定義しますが、インスタンス化するクラスをサブクラスに決定させます。ファクトリメソッドを使用すると、クラスはインスタンス化をサブクラスに延期できます。

ファクトリメソッドパターンには、次の利点があります。

「「
  • 製品は、製品の特定の作成プロセスを知らなくても、工場から入手できます。

  • 新しい製品を追加する場合、ファクトリを変更する必要はありません。新しいファクトリを追加するだけです。

ただし、これはファクトリモデルの欠点にもなり、システムの複雑さが増すことは間違いありません。

抽象ファクトリを実装する場合は、いくつかの要素が必要です。

「「
  • 抽象工場

  • 特定の工場

  • 抽象製品

  • 特定の製品

構造図は次のとおりです。

AbstractFactoryこれは抽象的なファクトリであり、実際にnewProduct()は製品を作成するために実装されるメソッドとのインターフェイスです。

ConcreteFactoryコンクリート工場のためにAbstractFactory、実現のために。複数の工場があるかもしれません。

Product製品のインターフェースです。

ConcreteProductそれは特定の製品の実現であり、一般的な製品と工場の間には1対1の対応があります。

コード

そうは言っても、それを実現するためのデモを書いてみましょう。

まず、製品インターフェイスを作成します。

public interface Product {
    void show();
}

ファクトリインターフェイスを作成しましょう。

public interface Factory {
    public Product product();
}

特定の製品の実現:

public class ConcreteProduct1 implements Product {
    @Override
    public void show() {
        System.out.println("具体产品1显示...");
    }
}

特定の工場の実現:

public class ConcreteFactory1 implements Factory {
    @Override
    public Product product() {
        System.out.println("具体工厂1生成-->具体产品1...");
        return new ConcreteProduct1();
    }
}

この工場は製品を作るために使われます。

製品オブジェクトを取得する場合は、ファクトリをインスタンス化するだけで済みます

@Slf4j
public class FactoryTest {
    @Test
    public void test() {
        ConcreteFactory1 concreteFactory1 = new ConcreteFactory1();
        Product product = concreteFactory1.product();
        product.show();
    }
}

試験結果:

具体工厂1生成-->具体产品1...
具体产品1显示...

ファクトリーメソッドパターンに関するいくつかの考え

製品自体はインスタンス化されませんが、それを行うために工場に引き渡されます。ファクトリメソッドは、クラスのインスタンス化をファクトリクラスに遅延させることです。

ファクトリー方式を使用することの重要な利点は、製品カテゴリーをブロックすることだと思います。発信者は、生成された製品の詳細を知らなくても製品を入手できるため、生成された製品のプライバシーとセキュリティが確保されます。

たとえば、JDBCを使用してデータベースに接続する場合、データベースをMySQLからOracleに移行する場合です。データベースドライバを変更するだけで済みます。他に変更する必要はありません。ここでは、ファクトリメソッドパターンが使用されています。

もちろん、製品カテゴリを追加する場合は、ファクトリカテゴリを追加するかどうかを慎重に検討する必要があります。結局のところ、これはシステムの複雑さを増します。

ファクトリメソッドパターンは、WebServiceを介した非Javaプロジェクトとの対話など、異種プロジェクトで使用できます。WebServiceは、異種システムの同形性を実現できると主張していますが、実際の開発にはまだ多くの問題があります。 、タイプの問題、WSDLファイルのサポートの問題など。WSDLから生成されたオブジェクトは製品と見なされ、周辺システムとの結合を減らすために特定のファクトリクラスによって管理されます。

複雑なアプリケーションでは、通常、マルチファクトリアプローチが使用され、その後、呼び出し元と各サブファクトリ間の通信を回避するために調整クラスが追加されます。調整クラスの役割は、サブファクトリクラスをカプセル化し、高レベルモジュールに統合アクセスインターフェイスを提供することです。

過去に推奨

QRコードをスキャンして、よりエキサイティングになります。または、WeChatLvshen_9を検索すると、返信してバックグラウンドで情報を取得できます

1.回复"java" 获取java电子书;

2.回复"python"获取python电子书;

3.回复"算法"获取算法电子书;

4.回复"大数据"获取大数据电子书;

5.回复"spring"获取SpringBoot的学习视频。

6.回复"面试"获取一线大厂面试资料

7.回复"进阶之路"获取Java进阶之路的思维导图

8.回复"手册"获取阿里巴巴Java开发手册(嵩山终极版)

9.回复"总结"获取Java后端面试经验总结PDF版

10.回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF)

11.回复"并发导图"获取Java并发编程思维导图(xmind终极版)

もう1つ:[マイベネフィット]をクリックして、さらに驚きを持ってください。

おすすめ

転載: blog.csdn.net/wujialv/article/details/108799052