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中文網其他相關文章!