工廠(chǎng)方法模式(Factory Method Pattern)是一種常用的創(chuàng)建型設(shè)計(jì)模式,它通過(guò)定義一個(gè)創(chuàng)建對(duì)象的接口,將具體對(duì)象的創(chuàng)建延遲到子類(lèi)中實(shí)現(xiàn),從而實(shí)現(xiàn)了對(duì)象的創(chuàng)建與使用的解耦。
工廠(chǎng)方法模式的核心思想是:定義一個(gè)用于創(chuàng)建對(duì)象的接口,但讓子類(lèi)決定實(shí)例化哪一個(gè)類(lèi)。這種模式使一個(gè)類(lèi)的實(shí)例化延遲到其子類(lèi),從而在不修改客戶(hù)端代碼的情況下,通過(guò)不同的子類(lèi)創(chuàng)建不同的對(duì)象。
工廠(chǎng)方法模式適用于以下場(chǎng)景:
優(yōu)勢(shì):
1. 良好的封裝性:創(chuàng)建對(duì)象的代碼被封裝在具體工廠(chǎng)中
2. 可擴(kuò)展性:增加新的產(chǎn)品類(lèi)時(shí),只需增加相應(yīng)的具體工廠(chǎng)類(lèi),無(wú)需修改現(xiàn)有代碼
3. 客戶(hù)端與具體產(chǎn)品的解耦:客戶(hù)端只依賴(lài)于抽象接口,不依賴(lài)于具體實(shí)現(xiàn)
局限:
1. 類(lèi)的數(shù)量增多:每增加一種產(chǎn)品,就需要增加一個(gè)具體工廠(chǎng)類(lèi)
2. 增加了系統(tǒng)的復(fù)雜性
以下是一個(gè)簡(jiǎn)單的工廠(chǎng)方法模式模型設(shè)計(jì)示例:
`java
// 抽象產(chǎn)品
interface Vehicle {
void drive();
}
// 具體產(chǎn)品:汽車(chē)
class Car implements Vehicle {
@Override
public void drive() {
System.out.println("駕駛汽車(chē)");
}
}
// 具體產(chǎn)品:自行車(chē)
class Bicycle implements Vehicle {
@Override
public void drive() {
System.out.println("騎自行車(chē)");
}
}
// 抽象工廠(chǎng)
abstract class VehicleFactory {
// 工廠(chǎng)方法
public abstract Vehicle createVehicle();
// 其他業(yè)務(wù)方法
public void deliver() {
Vehicle vehicle = createVehicle();
vehicle.drive();
}
}
// 具體工廠(chǎng):汽車(chē)工廠(chǎng)
class CarFactory extends VehicleFactory {
@Override
public Vehicle createVehicle() {
return new Car();
}
}
// 具體工廠(chǎng):自行車(chē)工廠(chǎng)
class BicycleFactory extends VehicleFactory {
@Override
public Vehicle createVehicle() {
return new Bicycle();
}
}
// 客戶(hù)端代碼
public class Client {
public static void main(String[] args) {
VehicleFactory factory = new CarFactory();
factory.deliver(); // 輸出:駕駛汽車(chē)
factory = new BicycleFactory();
factory.deliver(); // 輸出:騎自行車(chē)
}
}`
在Java中,工廠(chǎng)方法模式廣泛應(yīng)用于:
##
工廠(chǎng)方法模式通過(guò)將對(duì)象的創(chuàng)建延遲到子類(lèi),實(shí)現(xiàn)了創(chuàng)建過(guò)程的靈活性和擴(kuò)展性。它是面向?qū)ο笤O(shè)計(jì)中“針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程”原則的典型體現(xiàn)。掌握工廠(chǎng)方法模式,能夠幫助開(kāi)發(fā)者設(shè)計(jì)出更加靈活、可維護(hù)的軟件系統(tǒng)。
如若轉(zhuǎn)載,請(qǐng)注明出處:http://www.blogwomen.cn/product/76.html
更新時(shí)間:2026-10-13 15:33:34