/ **
*工場設計パターンモード、ユーザが作成したオブジェクト、コードを減らすためにカップリングによる工場モード
* @author
* /
//シンプルなファクトリパターン
{クラスし、SimpleFactoryパブリック
/ **
*異なる車に従ってオブジェクトを返すが、文字列パラメータ名名
* @param名
* @return
* /
公共駐車getCar(文字列名){
/ *
等号を使用して特性*()メソッド:任意用X-の非ヌル参照値について、x.equals(NULL)
*はfalseを返すべき
*「名前」は、非空の文字列オブジェクトであり、すなわち、X-の任意の非ヌル参照値である
* /
IF(name.equals(「ベンツ」) {)
(;)新しい新しいベンツを返す
(name.equals( "QQ" IF他{))}
新しい新しいQQ()を返す;
}そうでなければ{
するSystem.out.println( "そのようなプラントモデルを");
戻りNULL;
}
}
}
インタフェースカー{パブリック
実装する//バスインタフェース
文字列のgetNameを();
}
ベンツ実装車{クラス公開
//バスインタフェースを実装
@Override
パブリック文字列のgetName(){
リターン「ベンツ」;
}
}
車BWM実装クラス{パブリック
//バスインターフェース実装
@Override
パブリック文字列のgetName(){
リターン"BWMを";
}
}
{クラスSimpleFactoryTest公共
のpublic static無効メイン(文字列[] args){
//単純なテスト・クラス・ファクトリ
し、SimpleFactoryし、SimpleFactory新しい新しいし、SimpleFactory =();
車simpleFactory.getCar CAR =( "ベンツ");
のSystem.out.println(CAR。 getName()); //ベンツ
}
}
//ファクトリメソッド
ファクトリメソッド具象クラスの中核として抽象工場の役割を使用して、代わりにシンプルモードでのコアとして植物を使用しました。Factory Methodパターンは、ほとんどのビジネスニーズを満たすためにが、私たちは持っているかもしれません。製品の範囲は非常に長い場合でも、それは私たちが望むものではありません、対応するファクトリクラスが多数存在します。
(典型的には、互いに兄弟でツリーのリーフ)、すなわちを樹種と同様の製品で達成される単純なファクトリパターンを使用する:好ましくファクトリパターンを組み合わせて、簡単な方法ファクトリメソッドは、ファクトリクラスを低減することです。
木があるの異なる製品ツリー、製品および製品ファミリーのためのシステムの中でいくつかの点で存在し、この場合には、Abstract Factoryパターンを使用することも可能です。
//クラスファクトリインターフェイスが他の生産車を呼び出すための責任があるインターフェイスを定義
{工場のパブリックインターフェイス
カーgetCar();
}
インタフェースカー{パブリック
実装する//バスインタフェース
文字列のgetNameを();
}
ファクトリーのクラスBWMFactory実装{公共の
バス・インタフェースを実装//
@Override
)パブリックカーgetCarを({
新しい新しいBWMを返します();
}
}
ファクトリーのクラスBenZFactory実装{公共
//は、ファクトリインタフェース実装
@Override
パブリックカーgetCarを(){
新しい新しいベンツを(返します);
}
}
ベンツ実装車{クラス公開
達成//バスインタフェース
パブリック文字列のgetName(){
「ベンズ」を返します;
}
}
車BWM実装クラス{公共
達成//バスインタフェース
パブリック文字列のgetName(){
リターン「BWM」;
}
}
パブリッククラスFactoryTest {
パブリック静的無効メイン(文字列[] args){
//工厂的测试类
工場bwmFactory =新しいBWMFactory()。
System.out.println(bwmFactory.getCar()のgetName()。)。// BWM
工場benzFactory =新しいBenZFactory();
System.out.println(benzFactory.getCar()のgetName()。)。//ベンツ
}
}
//抽象ファクトリー
//インターフェースは、抽象ファクトリクラス定義
パブリック抽象クラスAbstractFactory {
抽象車getCar()保護;
//動的構成
公共駐車getCar(文字列名){
IF( "BWM" .equals(名)){
新しい新しいBWMFactoryを返します() .getCar();
}そうIF( "ベンツ" .equals(名)){
新しい新しいBenZFactoryを(リターン)getCarを();.
}他{
するSystem.out.println( "そのようなモデルの工場生産できません");
戻りヌル;
}
}
}
インタフェースカー{パブリック
実装する//バスインタフェース
文字列のgetNameを();
}
車BWM実装クラス{公共
達成//バスインタフェース
パブリック文字列のgetName(){
リターン「BWM」;
}
}
パブリッククラスベンツは車{実装
パブリック文字列のgetName(){
リターン「ベンツ」;
}
}
クラスBWMFactory AbstractFactoryを拡張{パブリック
//バスインターフェース実装
@Override
公共駐車getCarを(){
新しい新しいBWMを(返します);
}
}
クラスBenZFactory AbstractFactoryが延びる{パブリック
//ファクトリインタフェース実装
@Override
公共駐車getCarを(){
)新しい新しいベンツを(返します;
}
}
パブリッククラスDefaultFactoryはAbstractFactory {延び
プライベートAudiFactory defaultFactory =新しいAudiFactoryを();
公共駐車getCar(){
(defaultFactory.getCarを返します)。
}
}
パブリッククラスAbstractFactoryTest {
パブリック静的無効メイン(文字列[] args){
//工厂的测试类
DefaultFactory工場=新しいDefaultFactory()。
System.out.println(factory.getCar( "BWM")のgetName()); // BWM
}
}