ホームページ >Java >&#&ベース >Java の 3 つのファクトリー パターンとは何ですか?

Java の 3 つのファクトリー パターンとは何ですか?

青灯夜游
青灯夜游オリジナル
2020-11-02 14:23:465473ブラウズ

Java の 3 つのファクトリ パターン: 1. 特定の実装を気にせずにオブジェクト インスタンスを作成する機能を提供する単純ファクトリ パターン、2. ファクトリ メソッド パターン、3. を作成する機能を提供する抽象ファクトリ パターンオブジェクト インスタンス: 具体的なクラスを指定せずに、関連するオブジェクトまたは相互依存するオブジェクトのファミリーのためのインターフェイス。

Java の 3 つのファクトリー パターンとは何ですか?

#(推奨チュートリアル:

Java 入門チュートリアル)

1. 単純なファクトリ パターン

単純なファクトリの定義:

特定の実装を気にせずにオブジェクト インスタンスを作成する関数を提供します。作成されたインスタンスのタイプは、インターフェイス、抽象クラス、または特定のクラスのいずれかになります。

車のインターフェイスの実装

public interface Car {
    String getName();
}

Benz クラス

public class Benz implements Car {
    @Override
    public String getName() {
        return "Benz";
    }
}

BMW タイプ

public class BMW implements Car {
    @Override
    public String getName() {
        return "BMW";
    }
}

BMW とメルセデスベンツの両方を生産できる簡易工場

public class SimpleFactory {
    public Car getCar(String name){
        if (name.equals("BMW")){
            return new BMW();
        }else if (name.equals("benz")){
            return new Benz();
        }else {
            System.out.println("不好意思,这个品牌的汽车生产不了");
            return null;
        }
    }
}

テストクラス

public class SimpleFactoryTest {
    public static void main(String[] args){
        SimpleFactory simpleFactory = new SimpleFactory();
        Car car = simpleFactory.getCar("BMW");
        System.out.println(car.getName());
    }
}

テスト結果

BMW
単純なファクトリの定義によれば、ユーザーは製品のみを必要とし、製品がどのように機能するかは気にしません。製品は製造されており、見た目は完璧です。しかし考えてみてください、すべてを生産する工場がこの世界に存在するでしょうか?

もちろん存在しませんが、どの自動車ブランドも独自の生産工場と独自の生産技術を持っています。 Spring フレームワークにマッピングすると、生成する必要のある Bean の種類がたくさんあります。それを実装するために単純なファクトリのみに依存する場合、ファクトリ クラスに if..else if をいくつネストする必要がありますか?

また、コード上で車を作ると新しい車が出てくるだけですが、実際に動作させるとどれだけの操作が必要になるか分かりません。工場クラスでは、このクラスは混乱して管理が不便になるため、各ブランドが独自の生産カテゴリーを持つ必要があります。

専用だからプロフェッショナル ここでファクトリー方式が登場しました。

2. ファクトリ メソッド パターン

ファクトリ インターフェイス

//定义一个工厂接口,功能就是生产汽车
public interface Factory {
    Car getCar();
}

Benz Factory

public class BenzFactory implements Factory {
    @Override
    public Car getCar() {
        return new Benz();
    }
}

BMW ファクトリー

public class BMWFactory implements Factory{
    @Override
    public Car getCar() {
        return new BMW();
    }
}

テストカテゴリー

public class FactoryTest {
   public static void main(String[] args){
       Factory bmwFactory = new BMWFactory();
       System.out.println(bmwFactory.getCar().getName());
       Factory benzFactory = new BenzFactory();
       System.out.println(benzFactory.getCar().getName());
   }
}

テスト結果

BMW
Benz
によると上記のコードから、さまざまなブランドの車がさまざまな工場で生産されており、完璧であることがわかります。しかし、テストのカテゴリーを見ると、ある人がBMWの車を購入したいとき(販売者がいないと仮定して)、BMWの工場に行って車を生産しなければならず、数日後に購入したいと考えます。車を購入するときは、メルセデス・ベンツの工場に行って生産者を雇う必要があり、ユーザーの操作がより複雑になることは間違いありません。では、ユーザーフレンドリーな方法はあるのでしょうか?このとき、抽象的なファクトリーパターンが登場しました。

3. 抽象ファクトリ パターン

抽象ファクトリ

public abstract class AbstractFactory {

     protected abstract Car getCar();
     
     //这段代码就是动态配置的功能
     //固定模式的委派
     public Car getCar(String name){
        if("BMW".equalsIgnoreCase(name)){
            return new BmwFactory().getCar();
        }else if("Benz".equalsIgnoreCase(name)){
            return new BenzFactory().getCar();
        }else if("Audi".equalsIgnoreCase(name)){
            return new AudiFactory().getCar();
        }else{
            System.out.println("这个产品产不出来");
            return null;
        }
    }
}

デフォルト ファクトリ

public class DefaultFactory extends AbstractFactory {

    private AudiFactory defaultFactory = new AudiFactory();
    
    public Car getCar() {
        return defaultFactory.getCar();
    }

}

BMW 工場

public class BMWFactory extends AbstractFactory {
    @Override
    public Car getCar() {
        return new BMW();
    }
}

ベンツ工場

public class BenzFactory extends AbstractFactory {
    @Override    public Car getCar() {
            return new Benz();
    }
}

テスト クラス


public class AbstractFactoryTest {
    public static void main(String[] args) {        
        DefaultFactory factory = new DefaultFactory();        
        System.out.println(factory.getCar("Benz").getName());            
    }
}

テスト結果

Benz
上記のコードからわかるように、ユーザーが車を必要とする場合、デフォルトの工場に行って車を手配するだけで済みます。ユーザーのニーズ(受信パラメータ)に応じて、製品に基づいて異なる生産工場を探す必要がなく、必要な製品を入手できるため、ユーザーにとって操作が便利です。

注: デザイン パターンを嘲笑する人もいれば、デザイン パターンを神として尊敬する人もいますが、私はその意見に同意します。

私の大まかな理解によれば、デザイン パターンの典型的な点は、コードを書く人とコードを呼び出す人の両方の苦痛を解決するということです。さまざまなシナリオにのみ適用されます。利用するか否か、どのように利用するかについては、慎重に検討する必要があります。

しかし、ただ使うためだけに使うのではなく、その繊細さは皆さんにゆっくり味わっていただくしかありません。

プログラミング関連の知識について詳しくは、

プログラミング コースをご覧ください。 !

以上がJava の 3 つのファクトリー パターンとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。