まとめ
デザインパターンは芸術です。あなたが本当にこの芸術を理解しているなら、あなたは世界がより美しくなることに気付くでしょう。
意味
オブジェクトを作成するためのインターフェイスを定義し、サブクラスにインスタンス化するクラスを決定させます
シナリオを使用します
複雑なオブジェクトを使用する場所では、工場モードを使用できます
uml
1。抽象工場
抽象的な工場:工場には一般的に1つの機能、つまり生産、たとえばGeely Automobile Factory、つまりGeely Automobile、iPhoneの携帯電話メーカーなどがあることを知っているので、簡単な方法で要約できます。
2。特定の自動車製造工場
特定の自動車製造プラント:実際のプロセスと製造自動車などを備えた抽象的な工場を実現します。
3。抽象車
抽象的な車:私たちは一般に、車が走り、音楽を演奏し、ナビゲートし、ターンが車の一般的な機能であることを知っています。
4。特定の車
抽象車:コンクリート車は抽象的な車を実現し、すべての機能を持っています。もちろん、車によって異なる機能がある場合があります。
上記の簡単な紹介は、基本的に、特定の自動車工場が、アウディ工場、フォルクスワーゲン工場、フォルクスワーゲン車などの対応する車を製造することです。
コードデモ
上記の関係を明確に理解しているので、コードを使用してコードで上記のアイデアとロジックを実証します。
(1)抽象車の工場
パッケージcom.zengtao.demo.factory;/*** abstract Factory*/public abstract class carfactory {public abstract <t extends car> t createcar(class <t> cla);}(2)特定の自動車工場
パッケージcom.zengtao.demo.factory;/*** audi Factory*/public class oudifactory extends carfactory {@suppresswarnings( "unchecked")@override public <t car> t createcar(clas <t> cla){car car = null; try {car =(car)class.forname(cla.getname())。newinstance(); } catch(Exception e){e.printstacktrace(); } return(t)car; }}(3)抽象車の定義
パッケージcom.zengtao.demo.factory; public abstract class car {public abstract void drive(); public abstract void selfnagive(); public abstract void playmusic();}(4)特定の車
(アウディQ3)
パッケージcom.zengtao.demo.factory; public class audiq3carはaudicar {@override public void drive(){system.out.println( "audiq3carが正常に製造されました"); system.out.println( "audiq3carドライブ"); } @Override public void selfnagive(){system.out.println( "audiq3car selfnagive"); } @Override public void playmusic(){system.out.println( "audiq3car selfnagive"); } @Override public void playmusic(){system.out.println( "audiq3car playmusic"); System.out.println( ""); }}(アウディQ5)
パッケージcom.zengtao.demo.factory; public class audiq5carはaudicarを拡張します{@override public void drive(){system.out.println( "audiq5carが正常に製造されました"); system.out.println( "audiq5car drive"); } @Override public void selfnagive(){system.out.println( "audiq5car selfnagive"); } @Override public void playmusic(){system.out.println( "audiq5car selfnagive"); } @Override public void playmusic(){system.out.println( "audiq5car playmusic"); System.out.println( ""); }}(5)電話
パッケージcom.zengtao.demo; import com.zengtao.demo.factory.audifactory; Import com.zengtao.demo.factory.audiq3car; Import com.zengtao.demo.factory.audiq5car; public class main {public void main(String [] string adifory audifory audifory audifory audifory audifory adififory Audifactory(); //工場を使用して、Q3 car audiq3car audiq3car = audiofactory.createcar(audiq3car.class)を作成します。 //工場を使用して、Q5 car audiq5car audiq5car = audifactory.createcar(audiq5car.class)を作成します。 //運転を開始して音楽Audiq3car.drive(); audiq3car.playmusic(); audiq5car.drive(); audiq5car.playmusic(); }}(6)結果
上記については、工場の方法を使用して、車の製造の簡単なプロセスを実現します。
最初のポイント:
抽象的な工場では、CreateCar(クラスCLA)メソッドが、なぜこのように定義するのですか?反射を使用して特定の車を作成します。このように、私たちのさまざまな種類の車は対応する条件のみを必要としますが、それらは生産できますか?したがって、多くのアウディにQ3、Q5、A4、A6、A7、A8、その他のシリーズがあるように、このように書くことは有益です。
2番目のポイント:
BMW X1、320、X5などのBMWなどの他の車がある場合、非常に簡単に実装し、抽象工場を実装してから、特定の車に抽象車を実装することもできます。拡張も非常に便利です。
要約します
ここで抽象的な工場から抜け出す時が来ました。ファクトリーメソッドモデルは、比較的シンプルで優れた設計モデルです。
ただし、次のような欠点もあります。新しい車や他の種類の車がある場合、抽象的な工場と抽象的な車を実装してから、2つの新しいクラスを作成する必要があります。
しかし、それが車ではなく携帯電話である場合、それをすべて書く必要があります。これにより、工場メソッドモデルを採用するか、ニーズに基づいて決定するかどうかにかかわらず、多くのクラスが表示されます。
注:デザインのために設計パターンを適用しないでください。もちろん、次のようなファクトリーメソッドパターンも一般的に使用されています。アクティビティのOnCreateメソッド、定義するXMLレイアウトなどに基づいて対応するインターフェイスもロードおよび生成します。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。