ホームページ  >  記事  >  Java  >  Java コードを例として、デザイン パターンにおける単純なファクトリ パターンを説明します。

Java コードを例として、デザイン パターンにおける単純なファクトリ パターンを説明します。

黄舟
黄舟オリジナル
2017-01-20 11:18:041389ブラウズ

簡単に言えば、ファクトリ パターンは、要件に応じてオブジェクトの型を返すことです。ファクトリ パターンを使用する意味は、オブジェクトのインスタンス化とコードの依存関係が大きすぎると、拡張や保守が不便になることです。ファクトリを使用する目的は、インスタンス化をメインのプログラム コードから切り離すことです。詳しく見てみましょう:

1. シンプル ファクトリ パターンの概要
シンプル ファクトリ パターン (シンプル ファクトリ) とも呼ばれます。 「静的ファクトリメソッドパターン」。これは「作成パターン」(オブジェクトの作成パターン) に属し、「ファクトリ メソッド」パターンの特殊な実装です。
通常は、単純なファクトリーパターンを使用してクラスを作成します。たとえば、スレッド プール オブジェクトの取得は、単純なファクトリ パターンを通じて実現されます。その構造図は次のとおりです:

Java コードを例として、デザイン パターンにおける単純なファクトリ パターンを説明します。

ファクトリ: ファクトリは、単純なファクトリ パターンの中核であり、外部インターフェイスを提供します。クライアントまたは他のプログラムが Product オブジェクトを取得したい場合は、Factory インターフェイスを通じて取得する必要があります。
抽象プロダクト: 抽象プロダクトは、(多くの) 異なるプロダクトを抽象化したものです。 Product はインターフェイスまたは抽象クラスにすることができます。
具体的な製品: 工場に返される製品オブジェクトは、実際には ConcreteProduct を通じて作成されます。

2. 単純なファクトリ パターン コード モデル

public class Factory {
 public static Product newInstance() {
  return new ConcreteProduct();
 }
}
public abstract Product {
}
public class ConcreteProduct extends Product {
 public ConcreteProduct() {}
}

Java コードを例として、デザイン パターンにおける単純なファクトリ パターンを説明します。

3. 単純なファクトリ パターンの実際の適用

クライアントのリクエストを処理するサーブレットを作成する場合、多くの場合、1 つのサーブレットが次のような複数のビジネス ロジックを処理します。上記は、サーブレットが複数のビジネス ロジックを処理するための従来の方法です。より良い方法は、リクエストの分散をサーブレットから分離し、サーブレットにビジネス ロジックのみを処理させることです。リクエストされたさまざまなサーブレットを製品クラスとみなし、javax.servlet.HttpServlet が製品の親クラス、javax.servlet.Servlet が製品インターフェースであるため、ServletFactory を定義し、フィルタ内の URL リクエストを解析して ServletFactory に渡します。加工用 以上です。 これは典型的な単純なファクトリ アプリケーションです。

protected void doPost(HttpServletRequest request, HttpServletResponse response) {
 String flag = request.getParameter("flag");
 if(flag.equals("service1")) {
  service1();
 }else if(flag.equals("service2")) {
  service2();
 }
 ...
}

リクエストが来るたびに、ファクトリを使用してサーブレットを生成します。これにより、大量のサーブレット パス情報を XML で構成する必要がなくなり、より便利になります。これにより、サーブレットはビジネス層でのみ処理するロジックも明確になります。

ファクトリ クラスは次のとおりです:

@WebFilter("/TransRequest")
public class TransRequest implements Filter{
 private String servletName;
 @Override
 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
  HttpServletRequest myRequest = (HttpServletRequest)request;
  //拿到请求的servlet名字, 这里我们约定请求都是/servletName形式
  String names[] = myRequest.getRequestURI().trim().split("/");
  servletName = names[2];
  if( servletName != null) {
  //以下是最典型的两句简单工厂的例子
   Servlet servlet = ServletFactory.createServlet(servletName);
   servlet.service(request, response);
  }else
   chain.doFilter(request, response);
 }

上記のファクトリ クラスは面倒な if else を放棄しませんが、それでも単純なファクトリのアイデアを使用することでいくつかの問題を解決します。シンプル ファクトリは、デザイン パターンとはみなされない非常に単純なデザイン パターンであり、解決できる問題も非常に限られています。 上記のリクエスト分散は、Struts2 などのすべての主要な javaEE フレームワークに実装されています。もちろん、このフレームワークは単純なファクトリーではありません。

4. 概要

簡単なファクトリ パターンは、要約すると、ファクトリ クラス、プロダクト インターフェイス (実際には抽象クラス、または通常の親クラスである場合もあります)、およびプロダクト インターフェイスを実装する特定のプロダクトのグループです。 、およびこのファクトリ クラスは、渡されたパラメーターに基づいて特定の実装クラスを作成し、それを結果を返すインターフェイスに変換します。

上記は、デザイン パターン内の単純なファクトリ パターンの内容を説明する例として Java コードを使用しています。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。