簡単に言えば、ファクトリ パターンは、要件に応じてオブジェクトの型を返すことです。ファクトリ パターンを使用する意味は、オブジェクトのインスタンス化とコードの依存関係が大きすぎると、拡張や保守が不便になることです。ファクトリを使用する目的は、インスタンス化をメインのプログラム コードから切り離すことです。詳しく見てみましょう:
1. シンプル ファクトリ パターンの概要
シンプル ファクトリ パターン (シンプル ファクトリ) とも呼ばれます。 「静的ファクトリメソッドパターン」。これは「作成パターン」(オブジェクトの作成パターン) に属し、「ファクトリ メソッド」パターンの特殊な実装です。
通常は、単純なファクトリーパターンを使用してクラスを作成します。たとえば、スレッド プール オブジェクトの取得は、単純なファクトリ パターンを通じて実現されます。その構造図は次のとおりです:
ファクトリ: ファクトリは、単純なファクトリ パターンの中核であり、外部インターフェイスを提供します。クライアントまたは他のプログラムが 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() {} }
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); }
4. 概要
簡単なファクトリ パターンは、要約すると、ファクトリ クラス、プロダクト インターフェイス (実際には抽象クラス、または通常の親クラスである場合もあります)、およびプロダクト インターフェイスを実装する特定のプロダクトのグループです。 、およびこのファクトリ クラスは、渡されたパラメーターに基づいて特定の実装クラスを作成し、それを結果を返すインターフェイスに変換します。
上記は、デザイン パターン内の単純なファクトリ パターンの内容を説明する例として Java コードを使用しています。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。