A:シンプルなファクトリパターン
シンプルな植物の定義:関数オブジェクトのインスタンスが作成され、かつ、当該障害のその具体的な実現には、クラスのインスタンスを作成することであるインターフェースすることができ、抽象クラスでは、特定のクラスすることができます。
自動車・インタフェースの実装
パッケージGOF.factory.simpleFactory; / ** *バスインタフェース * / パブリック インターフェイスカー{ パブリック文字列getCarName()。 }
メルセデス・ベンツクラス
パッケージGOF.factory.simpleFactory; / ** *メルセデス・ベンツクラス * / パブリック クラス BenChiは、実装の車を{ @オーバーライド パブリック文字列getCarName(){ // するSystem.out.println( "ベンツ"); 戻り "ベンツ" 。 } }
BMWクラス
パッケージGOF.factory.simpleFactory; パブリック クラス BaoMaは、 実装の車を{ @オーバーライド 公共の文字列getCarName(){ // するSystem.out.println( "BMW"); リターン "BMW" 。 } }
シンプル工場
パッケージGOF.factory.simpleFactory; / ** *シンプル工場 *生産の両方だけでなく、生産BMW、メルセデス・ベンツ * / パブリック クラスし、SimpleFactory { パブリックカーgetCar(文字列名){ 場合(name.equals( "BMW" )){ 返す 新しい)(BaoMaを。 } そう であれば(name.equals( "ベン" )){ 戻り 新しい)(BenChiします。 } 他{ System.out.println(「生産する一時的にできない!」); 戻り ヌルを。 } } }
テストカテゴリ
パッケージGOF.factory.simpleFactory; パブリック クラスのテスト{ 公共 静的 ボイドメイン(文字列[]引数){ し、SimpleFactoryし、SimpleFactory = 新しいし、SimpleFactory(); 車CAR1 = simpleFactory.getCar( "ベン" ); System.out.println(car1.getCarName())。 車のCaR2 = simpleFactory.getCar( "BMW" ); System.out.println(car2.getCarName())。 } }
テスト結果
植物の生産は、この世界に存在するものです、簡単な植物の定義によると、限り、ユーザーが製品を気にしないとどのように生成するように、完璧な方法のようですが、我々はそれについて考えますか?
明らかに存在していない、すべての車のブランドは、独自の製造工場を持っている独自の技術を持って、春にマッピングされ、それが達成するために、単純な工場に依存している場合、我々は、我々が取得、豆の生産ニーズの多くを持っていますどのように多くの工場if..elseはああネスト?
そして、我々は、コードで何出てきたが、実際の操作だけで新しい車を生産するが、動作させるためにどのくらいかわからない、負荷、登録およびその他の操作は、ファクトリクラスに反映されます、そのクラスは非常に無秩序になるだろう各ブランドが独自の生産クラスを持つべきであるように、また、管理が非常に簡単です。だから、ファクトリメソッドが登場しました。
第二に、ファクトリメソッド
工場インタフェース
パッケージGOF.factory.factoryMethod; 輸入GOF.factory.simpleFactory.Car。 / ** *工場出荷時のインターフェイスを定義し、この関数は量産車であります * / パブリック・ インタフェースファクトリー{ カーgetCar(); }
BMW工場
パッケージGOF.factory.factoryMethod; 輸入GOF.factory.simpleFactory.BaoMa。 輸入GOF.factory.simpleFactory.Car。 パブリック クラス BMWFactoryは、実装工場を{ @オーバーライド パブリックカーgetCar(){ 返す 新しい)(BaoMaを。 } }
メルセデス・ベンツの工場
パッケージGOF.factory.factoryMethod; 輸入GOF.factory.simpleFactory.BenChi。 輸入GOF.factory.simpleFactory.Car。 パブリック クラス BenzFactoryは、実装工場を{ @オーバーライド パブリックカーgetCar(){ 返す 新しいBenChiを(); } }
テストカテゴリ
パッケージGOF.factory.factoryMethod; パブリック クラスのテスト{ 公共 静的 ボイドメイン(文字列[]引数){ // 宝马 工場出荷時= 新しいBMWFactory()。 System.out.println(factory.getCar()getCarName()。)。 // 奔驰 工場factory1 = 新しいBenzFactory(); System.out.println(factory1.getCar()getCarName()。)。 } }
テスト結果
上記のコードによると見られることができ、車の異なるブランドが異なる植物によって生産さだけでなく、非常に完璧に見えるされています。しかし、我々は人がBMWの車を購入したい場合には、テストクラスを見て、彼はあなたがメルセデスを購入したい時に数日があり、あなたが実行する必要がBMWの工場の生産を見つけるために、彼に与えました間違いなく、ユーザの操作の複雑さを増加させる、人を喜ばせるためにメルセデスベンツの生産工場。それを操作するユーザーを容易にする方法はありますので、?今回は抽象的な工場が登場しました。
第三に、抽象工場