ホームページ > Java > &#&チュートリアル > Javaファクトリパターンの詳細説明:単純ファクトリ、ファクトリメソッド、抽象ファクトリ

Javaファクトリパターンの詳細説明:単純ファクトリ、ファクトリメソッド、抽象ファクトリ

PHPz
リリース: 2023-12-28 10:23:13
オリジナル
978 人が閲覧しました

Javaファクトリパターンの詳細説明:単純ファクトリ、ファクトリメソッド、抽象ファクトリ

Java ファクトリ パターンの詳細な説明: 単純なファクトリ、ファクトリ メソッド、および抽象ファクトリ

ファクトリ パターンは、一般的に使用される設計パターンであり、次のとおりに動的に作成するために使用されます。さまざまなニーズ オブジェクトは、オブジェクトの作成と使用を分離して、コードの再利用性とスケーラビリティを向上させます。 Java には、ファクトリ パターンの主な形式として、単純ファクトリ、ファクトリ メソッド、抽象ファクトリの 3 つがあります。

1. シンプル ファクトリ パターン
シンプル ファクトリ パターンは、最も基本的なファクトリ パターンであり、最も単純な形式です。ファクトリ クラスを通じてオブジェクトを作成し、さまざまなパラメーターに基づいて作成するオブジェクトのタイプを決定します。

まず、抽象製品クラスを定義します。すべての特定の製品クラスはこの抽象クラスから継承します。次に、さまざまなパラメーターに基づいて対応する特定の製品を返す静的メソッドを含むファクトリ クラスを作成します。

以下は自動車生産プロセスをシミュレートするサンプル コードです:

// 定义抽象产品类
abstract class Car {
    public abstract void produce();
}

// 定义具体产品类
class BenzCar extends Car {
    public void produce() {
        System.out.println("生产奔驰汽车");
    }
}

class BMWCar extends Car {
    public void produce() {
        System.out.println("生产宝马汽车");
    }
}

// 实现工厂类
class CarFactory {
    public static Car createCar(String brand) {
        if (brand.equals("Benz")) {
            return new BenzCar();
        } else if (brand.equals("BMW")) {
            return new BMWCar();
        } else {
            throw new IllegalArgumentException("Unsupported brand:" + brand);
        }
    }
}

// 测试代码
public class SimpleFactoryPatternDemo {
    public static void main(String[] args) {
        Car benz = CarFactory.createCar("Benz");
        benz.produce();

        Car bmw = CarFactory.createCar("BMW");
        bmw.produce();
    }
}
ログイン後にコピー

CarFactory.createCar メソッドを呼び出すことにより、さまざまなブランドの自動車オブジェクトを作成できます。異なるパラメータに設定します。

シンプル ファクトリ パターンの利点は、理解しやすく、単純なシナリオに適していることです。ただし、オープンとクローズの原則に反するため、新しいプロダクトを追加する場合、ファクトリ クラスのコードを変更する必要があるという欠点があります。

2. ファクトリ メソッド パターン
ファクトリ メソッド パターンは、単純なファクトリ パターンの拡張であり、メソッドを定義するための抽象ファクトリ クラスを導入し、特定の製品の作成はサブクラスのファクトリ クラスによって実装されます。各具体的なファクトリ クラスは、1 種類の製品の作成のみを担当します。

まず、抽象製品クラスを定義します。この抽象製品クラスは、すべての具体的な製品クラスにも継承されます。次に、製品を作成するための抽象メソッドを含む抽象ファクトリ クラスを作成します。各具体的なファクトリ クラスは、製品の作成を担当します。

以下は、携帯電話の製造プロセスをシミュレートするサンプル コードです。

// 定义抽象产品类
abstract class Phone {
    public abstract void produce();
}

// 定义具体产品类
class ApplePhone extends Phone {
    public void produce() {
        System.out.println("生产苹果手机");
    }
}

class HuaweiPhone extends Phone {
    public void produce() {
        System.out.println("生产华为手机");
    }
}

// 定义抽象工厂类
abstract class PhoneFactory {
    public abstract Phone createPhone();
}

// 定义具体工厂类
class ApplePhoneFactory extends PhoneFactory {
    public Phone createPhone() {
        return new ApplePhone();
    }
}

class HuaweiPhoneFactory extends PhoneFactory {
    public Phone createPhone() {
        return new HuaweiPhone();
    }
}

// 测试代码
public class FactoryMethodPatternDemo {
    public static void main(String[] args) {
        PhoneFactory appleFactory = new ApplePhoneFactory();
        Phone applePhone = appleFactory.createPhone();
        applePhone.produce();

        PhoneFactory huaweiFactory = new HuaweiPhoneFactory();
        Phone huaweiPhone = huaweiFactory.createPhone();
        huaweiPhone.produce();
    }
}
ログイン後にコピー

さまざまな特定のファクトリ クラスを実装することにより、各ファクトリ クラスは、あるタイプの携帯電話オブジェクトの作成を担当します。ファクトリ メソッド パターンを使用すると、既存のコードを変更せずに製品シリーズを簡単に追加できます。

ファクトリ メソッド パターンの利点は、オープンとクローズの原則に準拠していることです。各特定のファクトリ クラスは 1 つの製品の作成のみを担当し、拡張が簡単です。ただし、システムの複雑さが増し、製品ごとに特定のファクトリ クラスを定義する必要があるという欠点があります。

3. 抽象ファクトリ パターン
抽象ファクトリ パターンは、ファクトリ メソッド パターンの継続的な拡張です。メソッドのセットを定義するための抽象ファクトリ クラスが導入され、各メソッドは製品シリーズの作成を担当します。 。各具体的なファクトリ クラスは、製品ファミリーの作成を担当します。

まず、抽象プロダクト クラスと抽象ファクトリ クラスを定義します。各抽象ファクトリ クラスには、プロダクトを作成するための複数の抽象メソッドが含まれています。次に、特定のプロダクト クラスと特定のファクトリ クラスを作成し、それぞれ抽象プロダクト クラスとファクトリ クラスを実装します。

次は、テレビと冷蔵庫の製造プロセスをシミュレートするサンプル コードです。

// 定义抽象产品类
abstract class TV {
    public abstract void produce();
}

abstract class Refrigerator {
    public abstract void produce();
}

// 定义具体产品类
class SamsungTV extends TV {
    public void produce() {
        System.out.println("生产三星电视");
    }
}

class TCLTV extends TV {
    public void produce() {
        System.out.println("生产TCL电视");
    }
}

class HaierRefrigerator extends Refrigerator {
    public void produce() {
        System.out.println("生产海尔冰箱");
    }
}

class GreeRefrigerator extends Refrigerator {
    public void produce() {
        System.out.println("生产格力冰箱");
    }
}

// 定义抽象工厂类
abstract class ApplianceFactory {
    public abstract TV createTV();
    public abstract Refrigerator createRefrigerator();
}

// 定义具体工厂类
class SamsungFactory extends ApplianceFactory {
    public TV createTV() {
        return new SamsungTV();
    }

    public Refrigerator createRefrigerator() {
        return new HaierRefrigerator();
    }
}

class TCLFactory extends ApplianceFactory {
    public TV createTV() {
        return new TCLTV();
    }

    public Refrigerator createRefrigerator() {
        return new GreeRefrigerator();
    }
}

// 测试代码
public class AbstractFactoryPatternDemo {
    public static void main(String[] args) {
        ApplianceFactory samsungFactory = new SamsungFactory();
        TV samsungTV = samsungFactory.createTV();
        Refrigerator haierRefrigerator = samsungFactory.createRefrigerator();
        samsungTV.produce();
        haierRefrigerator.produce();

        ApplianceFactory tclFactory = new TCLFactory();
        TV tclTV = tclFactory.createTV();
        Refrigerator greeRefrigerator = tclFactory.createRefrigerator();
        tclTV.produce();
        greeRefrigerator.produce();
    }
}
ログイン後にコピー

さまざまな具象ファクトリ クラスを実装することにより、各具象ファクトリ クラスは製品シリーズの作成を担当します。抽象ファクトリー パターンを使用すると、既存のコードを変更せずに製品シリーズを簡単に追加できます。

抽象ファクトリー パターンの利点は、オープンとクローズの原則に準拠し、拡張が容易で、製品間の相関関係を維持できることです。ただし、新しい製品シリーズを追加するときに、抽象ファクトリ クラスのコードを変更する必要があるという欠点があります。

概要:
ファクトリ パターンは、さまざまなニーズに応じてオブジェクトを動的に作成するために一般的に使用されるデザイン パターンです。 Java には、単純ファクトリ、ファクトリ メソッド、抽象ファクトリの 3 つの主なファクトリ パターンがあります。シンプル ファクトリ パターンは最も基本的な形式であり、ファクトリ メソッド パターンはそれに基づいて抽象ファクトリ クラスを導入し、抽象ファクトリ パターンはファクトリ メソッド パターンを拡張し、製品シリーズを作成するためのメソッドのセットを導入します。特定のアプリケーション シナリオと要件に基づいて、適切なファクトリ パターンを選択すると、コードの再利用性とスケーラビリティが向上します。

以上がJavaファクトリパターンの詳細説明:単純ファクトリ、ファクトリメソッド、抽象ファクトリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート