単純な工場パターンの概念
工場クラスを確立し、同じインターフェイスを実装するいくつかのクラスのインスタンスを作成することです。単純な工場パターンの本質は、工場のクラスが、製品クラスのどのインスタンス(親クラスまたはインターフェイスから継承する)のインスタンスを動的に決定することです。
単純な工場モードのUML図
単純な工場パターンコード
単純な工場モデルを学んでいたとき、人間に関連する例を使用しました。人間は世界の男性と女性に分けられ、最初に人間の製品の抽象的なインターフェースを定義します。
/** *これはファクトリーパターンパッケージです */パッケージcom.roc.factory;/** *製品の抽象インターフェースhuman * @author liaowp * */public interface human {public void say();}その後、男性と女性の両方に話す方法があります。
/** *これは工場のパターンパッケージ */パッケージcom.roc.factory;/** * man man * @author liaowp * * */public class man exprence human {/ * say method * @see com.roc.factory.human#say() */@override public void saks }} /** *これは工場のパターンパッケージ */パッケージcom.roc.factory;/** woman * @author liaowp * */public class woman exprence human {/ * say method * @see com.roc.factory.human#say() */@Override public void saks }}最後に、工場のクラスを書いて、男性と女性を作成します。最初の方法は、論理的判断を使用して達成されます。
パッケージcom.roc.factory;/** * simple Factory * @author liaowp * */public class sampleFactory {public static human makehuman(string type){if(type.equals( "man")){human man = new man();帰国男; } else if(type.equals( "womman")){human woman = new woman();女性を返します。 } else {system.out.println( "ca n't roduce"); nullを返します。 }}}2番目の方法は、Java放射を使用して実装することです。このタイプの実装の方が良いと思います。
パッケージ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-fenated catch block system.out.println( "要約クラスまたはインターフェイスはサポートされていません"); e.printstacktrace(); } catch(Illegalaccessexception e){// todo auto-enerated catch block e.printstacktrace(); system.out.println( "十分な権限はありません。つまり、プライベートオブジェクトにアクセスできません」); } catch(classNotFoundException e){// todo auto-enerated catch block system.out.println( "classnot exists"); e.printstacktrace(); }人間を返します。 }}最後に、クライアントのコード
パッケージcom.roc.factory;/** * Simple Factory Test * @author liaowp * */public class client {public static void main(string [] args){// human man = samplefactory.makehuman( "man"); // man.say(); // human womman = samplefactory.makhuman( "womman"; // samplefactory.makehuman( "tttt");人間= samplefactory1.makehuman(man.class); man.say();人間= sampleFactory1.makehuman(woman.class); woman.say(); }}シンプルな工場モードアプリケーションシナリオ
利点:工場クラスは、モデル全体の鍵です。必要な論理的判断が含まれており、外の世界から与えられた情報に基づいて作成される特定のクラスオブジェクトを決定します。工場のクラスを使用することにより、外の世界は、特定の製品オブジェクトを直接作成するという恥ずかしい状況を取り除くことができ、「消費」オブジェクトに責任を負う必要があります。これらのオブジェクトがどのように作成および整理されているかは関係ありません。それぞれの責任と権利は明らかにされており、これはソフトウェアアーキテクチャ全体の最適化を助長します。
短所:工場クラスはすべてのインスタンスの作成ロジックに集中し、高いまとまりのある責任配分の原則に違反するため、すべての作成ロジックは1つの工場クラスに集中しています。作成できるクラスは、事前にのみ考慮することができます。新しいクラスを追加する必要がある場合、工場クラスを変更する必要があります。システム内の特定の製品カテゴリの数が増加し続けるにつれて、工場クラスが異なる条件に応じて異なるインスタンスを作成する必要がある可能性があります。この条件の判断と特定の製品タイプの判断は、互いに絡み合っているため、システムのメンテナンスと拡張には非常に不利なモジュール機能の拡大を回避することが困難です。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。