首頁 >Java >java教程 >Java工廠模式詳解:簡單工廠、工廠方法與抽象工廠

Java工廠模式詳解:簡單工廠、工廠方法與抽象工廠

PHPz
PHPz原創
2023-12-28 10:23:13981瀏覽

Java工廠模式詳解:簡單工廠、工廠方法與抽象工廠

Java工廠模式詳解:簡單工廠、工廠方法和抽象工廠

#工廠模式是一種常用的設計模式,它用於根據不同的需求動態創建對象,將物件的建立與使用分離,提高程式碼的可重複使用性和可擴充性。在Java中,工廠模式主要有三種形式:簡單工廠、工廠方法、抽象工廠。

一、簡單工廠模式
簡單工廠模式是最基本的工廠模式,也是最簡單的一種形式。它透過一個工廠類別來建立對象,根據不同的參數來決定要建立哪種類型的對象。

首先,定義一個抽象的產品類,所有特定產品類別都繼承自該抽象類別。然後,建立一個工廠類,該類包含一個靜態方法,根據不同的參數傳回相應的特定產品。

下面是一個範例程式碼,模擬汽車生產的過程:

// 定义抽象产品类
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方法,根據不同的參數可以建立不同品牌的汽車物件。

簡單工廠模式的優點是簡單易懂,適用於簡單的場景。但是缺點是違反了開放封閉原則,當新增一種產品時,需要修改工廠類別的程式碼。

二、工廠方法模式
工廠方法模式是簡單工廠模式的擴展,它引入了一個抽象的工廠類別來定義方法,具體的產品創建由子類別工廠類別實作。每個特定工廠類別只負責創建一種類型的產品。

首先,定義一個抽象的產品類,同樣由所有特定產品類繼承。然後,建立一個抽象的工廠類,該類別包含一個抽象的創建產品的方法。每個特定的工廠類別負責創建一種產品。

下面是一個範例程式碼,模擬手機生產的過程:

// 定义抽象产品类
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();
    }
}

透過實現不同的特定工廠類,每個工廠類負責創建一種類型的手機物件。使用工廠方法模式,可以輕鬆新增更多的產品系列,而不需要修改現有的程式碼。

工廠方法模式的優點是符合開放封閉原則,每個特定工廠類別只負責創建一種產品,易於擴展。但缺點是增加了系統的複雜度,需要為每個產品定義一個特定工廠類別。

三、抽象工廠模式
抽象工廠模式是工廠方法模式的繼續擴展,它引入了一個抽象的工廠類別來定義一組方法,每個方法負責創建一個產品系列。每個特定工廠類別負責創建一種產品系列。

首先,定義抽象的產品類別和抽象的工廠類,每個抽象工廠類別包含多個抽象的創建產品的方法。然後,創建具體的產品類別和具體的工廠類,分別實現抽象的產品類別和工廠類別。

下面是一個範例程式碼,模擬電視和冰箱生產的過程:

// 定义抽象产品类
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中主要有三種工廠模式:簡單工廠、工廠方法、抽象工廠。簡單工廠模式是最基本的一種形式,工廠方法模式在其基礎上引入了抽象工廠類,抽象工廠模式則擴展了工廠方法模式,引入了一組方法來創建產品系列。根據具體的應用場景和需求,選擇合適的工廠模式可以提高程式碼的可重複使用性和可擴展性。

以上是Java工廠模式詳解:簡單工廠、工廠方法與抽象工廠的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

相關文章

看更多