単純なファクトリ パターン
の概念は、同じインターフェイスを実装するいくつかのクラスのインスタンスを作成するファクトリ クラスを確立することです。単純なファクトリ パターンの本質は、ファクトリ クラスが、受信パラメータに基づいて製品クラスのどのインスタンス (これらの製品クラスは親クラスまたはインターフェイスから継承する) を作成する必要があるかを動的に決定することです。
単純なファクトリ パターンの UML 図
単純なファクトリ パターン コード
単純なファクトリ パターンを学習するときに、人間に関連する例を使用しました。世界では人間は男性と女性に分かれています。まず人間の製品の抽象的なインターフェースを定義します
次に、話す方法を持つ男性と女性を定義します。
/** * This is factory patter package */ package com.roc.factory; /** * 产品的抽象接口 人类 * @author liaowp * */ public interface Human { public void say(); }
/** * This is factory patter package */ package com.roc.factory; /** * man 男人 * @author liaowp * */ public class Man implements Human { /* say method * @see com.roc.factory.Human#say() */ @Override public void say() { System.out.println("男人"); } }
最後に、男性と女性を作成するためのファクトリー クラスを作成します。 1 つ目の方法は、論理的な判断を行うことです。
/** * This is factory patter package */ package com.roc.factory; /**女人 * @author liaowp * */ public class Woman implements Human { /* say method * @see com.roc.factory.Human#say() */ @Override public void say() { System.out.println("女人"); } }
2 番目の方法は Java 放射を使用して実装されており、このタイプの実装の方が優れていると思います。
package com.roc.factory; /** * 简单工厂 * @author liaowp * */ public class SampleFactory { public static Human makeHuman(String type){ if(type.equals("man")){ Human man = new Man(); return man; }else if(type.equals("womman")){ Human woman = new Woman(); return woman; }else{ System.out.println("生产不出来"); return null; } } }
最後はクライアントコードです
package com.roc.factory; /** * 简单工厂放射实现 * @author liaowp * */ public class SampleFactory1 { public static Human makeHuman(Class c){ Human human = null; try { human = (Human) Class.forName(c.getName()).newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block System.out.println("不支持抽象类或接口"); e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("没有足够权限,即不能访问私有对象"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block System.out.println("类不存在"); e.printStackTrace(); } return human; } }
シンプルなファクトリパターン適用シナリオ
利点: ファクトリクラスはパターン全体の鍵であり、必要な論理的判断が含まれており、それに基づいて何を行うべきかを決定します。外部の世界から与えられる情報。どの特定のオブジェクトのクラスを作成するかという情報。ファクトリ クラスを使用すると、外部の世界は特定の製品オブジェクトを直接作成するという面倒な状況をなくすことができ、その情報を「消費」するだけで済みます。物体。これらのオブジェクトがどのように作成され編成されるかは関係ありません。それぞれの責任と権利を明確にすることは、ソフトウェア アーキテクチャ全体の最適化に役立ちます。
短所: ファクトリ クラスはすべてのインスタンスの作成ロジックを集中させるため、高凝集性の責任割り当ての原則に違反し、すべての作成ロジックを 1 つのファクトリ クラスに集中させます。新しいクラスを追加する必要がある場合は、ファクトリ クラスを変更する必要があります。システム内の特定の製品カテゴリの数が増加し続けると、ファクトリ クラスがさまざまな条件に応じてさまざまなインスタンスを作成する必要が生じる場合があります。このような条件の判断と特定の製品タイプの判断が絡み合っているため、モジュールの機能の普及を避けることが難しく、システムの維持と拡張に非常に悪影響を及ぼします
以上がこの記事の全内容です。 , 皆様のヘルプ学習に役立つことを願っており、皆様も PHP 中国語 Web サイトをサポートしていただければ幸いです。
Java デザイン パターンのシンプルなファクトリー パターンの簡単な説明に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。