1。シンプルな工場モデルの紹介
「静的工場メソッドモード」とも呼ばれる単純な工場モード。 「作成モード」(オブジェクトを作成するためのパターン)に属し、「ファクトリーメソッド」パターンの特別な実装です。
通常、単純な工場パターンを使用してクラスを作成します。たとえば、スレッドプールオブジェクトの取得は、単純な工場モードで達成されます。その構造図は次のとおりです。
工場:工場は単純な工場モデルの中核であり、外部インターフェイスを提供します。クライアントまたは他のプログラムが製品オブジェクトを取得したい場合、それらは工場インターフェイスを介して取得されます。
要約製品:抽象製品は、(多くの)異なる製品によって抽象化されています。製品は、インターフェイスまたは抽象クラスにすることができます。
特定の製品:工場で返される製品オブジェクトは、実際にはコンクリートプロダクトを通じて作成されます。
2。シンプルな工場パターンコードモデル
Public Class Factory {public static Product newInstance(){return new ConcreTeproduct(); }} public Abstract Product {} public class concreTeproduct extends product {public concreteproduct(){}}モデルのクラス図
3.単純な工場モデルの実用的なアプリケーション
クライアントリクエストを処理するサーブレットを作成するとき、たとえば、1つのサーブレットで複数のビジネスロジックを処理することがよくあります。
保護されたvoid dopost(httpservletrequest request、httpservletresponse応答){string flag = request.getParameter( "flag"); if(flag.equals( "service1")){service1(); } else if(flag.equals( "service2")){service2(); } ...}上記は、マルチビジネスロジックを処理し、他の声明の束を書くためのサーブレットの一般的な方法です。より良い方法は、要求された分布をサーブレットから分離して、サーブレットがビジネスロジックのみを処理するようにすることです。さまざまな要求されたサーブレットを製品クラスと見なしています。 javax.servlet.httpservletは製品の親クラスであり、javax.servlet.servletは製品インターフェイスです。このようにして、サーブレクトファクティを定義し、フィルターのURL要求を解析し、処理のためにサーブレクトファクトリーに引き渡します。これは典型的な単純な工場アプリケーションです。
@webfilter( "/transRequest")パブリッククラスTransRequestを実装しているフィルター{private string servletname; @Override public void dofilter(servletRequest request、servletResponse応答、フィルターチェーンチェーン)IoException、servletexception {httpservletrequest myRequest =(httpservletrequest)リクエスト。 //要求されたサーブレット名を取得します。ここで、リクエストは/servletname文字列名の形式であることに同意します。 servletname = names [2]; if(servletname!= null){//以下は、単純な工場の2つの最も典型的な例servlet servlet = servletfactory.createServlet(servletname); Servlet.Service(リクエスト、応答); } else Chain.dofilter(request、response); }リクエストを要求するたびに、工場を使用してサーブレットを作成します。これにより、XMLで大量のサーブレットパス情報の構成を避けることができます。また、これによりロジックがより明確になり、サーブレットはビジネスレベルでのビジネスのみを処理します。
工場のカテゴリは次のとおりです。
public class servletactory {public static servlet createServlet(string servletname)throws servletexception {if(servletname.equals( "servletname1")){return new Service1(); } else if(servletname.equals( "servletname2")){return new Service2(); } else {throw new servletexception( "そのようなサーブレットなし"); }}}上記の工場のクラスは、他の面倒なものを脇に置いていませんが、単純な工場を使用するという考えは依然としていくつかの問題を解決します。シンプルな工場は、デザインパターンとは見なされない非常にシンプルなデザインパターンであり、解決された問題も限られています。上記のリクエスト分布が実装されています。たとえば、Struts2、もちろん、フレームワークは単純な工場ではありません。
4。概要
Simple Factoryモデルは、要約すると、工場クラス、製品インターフェイス(実際、抽象クラス、または通常の親クラスでもあります)、および製品インターフェイスを実装する特定の製品のグループです。この工場クラスは、合格したパラメーターに基づいて特定の実装クラスを作成し、結果としてインターフェイスに上方に変換します。