又黄又色又潮的视频-大度亲吻原声视频在线观看-亚洲国产91-久久尤物视频-色婷婷狠狠爱-色老头在线视频-欧美一区二区在线-伊人网亚洲-久久久免费观看视频-日本亚洲综合

當(dāng)前位置: 首頁 > 產(chǎn)品大全 > 23種設(shè)計(jì)模式之工廠方法模式 靈活創(chuàng)建對(duì)象的藝術(shù)

23種設(shè)計(jì)模式之工廠方法模式 靈活創(chuàng)建對(duì)象的藝術(shù)

23種設(shè)計(jì)模式之工廠方法模式 靈活創(chuàng)建對(duì)象的藝術(shù)

工廠方法模式(Factory Method Pattern)是一種常用的創(chuàng)建型設(shè)計(jì)模式,它通過定義一個(gè)創(chuàng)建對(duì)象的接口,將具體對(duì)象的創(chuàng)建延遲到子類中實(shí)現(xiàn),從而實(shí)現(xiàn)了對(duì)象的創(chuàng)建與使用的解耦。

一、模式定義與核心思想

工廠方法模式的核心思想是:定義一個(gè)用于創(chuàng)建對(duì)象的接口,但讓子類決定實(shí)例化哪一個(gè)類。這種模式使一個(gè)類的實(shí)例化延遲到其子類,從而在不修改客戶端代碼的情況下,通過不同的子類創(chuàng)建不同的對(duì)象。

二、模式結(jié)構(gòu)

  1. 抽象產(chǎn)品(Product):定義了產(chǎn)品的接口,是工廠方法創(chuàng)建的所有對(duì)象的超類型
  2. 具體產(chǎn)品(ConcreteProduct):實(shí)現(xiàn)了抽象產(chǎn)品接口的具體產(chǎn)品類
  3. 抽象工廠(Creator):聲明了工廠方法(返回抽象產(chǎn)品類型)的抽象類
  4. 具體工廠(ConcreteCreator):實(shí)現(xiàn)了工廠方法,返回具體產(chǎn)品的實(shí)例

三、應(yīng)用場(chǎng)景

工廠方法模式適用于以下場(chǎng)景:

  • 當(dāng)一個(gè)類不知道它所需要的對(duì)象的類時(shí)
  • 當(dāng)一個(gè)類希望由其子類來指定它所創(chuàng)建的對(duì)象時(shí)
  • 當(dāng)類將創(chuàng)建對(duì)象的職責(zé)委托給多個(gè)輔助子類中的某一個(gè),并且希望將哪一個(gè)輔助子類是代理者這一信息局部化時(shí)

四、優(yōu)勢(shì)與局限

優(yōu)勢(shì)
1. 良好的封裝性:創(chuàng)建對(duì)象的代碼被封裝在具體工廠中
2. 可擴(kuò)展性:增加新的產(chǎn)品類時(shí),只需增加相應(yīng)的具體工廠類,無需修改現(xiàn)有代碼
3. 客戶端與具體產(chǎn)品的解耦:客戶端只依賴于抽象接口,不依賴于具體實(shí)現(xiàn)

局限
1. 類的數(shù)量增多:每增加一種產(chǎn)品,就需要增加一個(gè)具體工廠類
2. 增加了系統(tǒng)的復(fù)雜性

五、模型設(shè)計(jì)示例

以下是一個(gè)簡(jiǎn)單的工廠方法模式模型設(shè)計(jì)示例:

`java // 抽象產(chǎn)品 interface Vehicle { void drive(); }

// 具體產(chǎn)品:汽車
class Car implements Vehicle {
@Override
public void drive() {
System.out.println("駕駛汽車");
}
}

// 具體產(chǎn)品:自行車
class Bicycle implements Vehicle {
@Override
public void drive() {
System.out.println("騎自行車");
}
}

// 抽象工廠
abstract class VehicleFactory {
// 工廠方法
public abstract Vehicle createVehicle();

// 其他業(yè)務(wù)方法
public void deliver() {
Vehicle vehicle = createVehicle();
vehicle.drive();
}
}

// 具體工廠:汽車工廠
class CarFactory extends VehicleFactory {
@Override
public Vehicle createVehicle() {
return new Car();
}
}

// 具體工廠:自行車工廠
class BicycleFactory extends VehicleFactory {
@Override
public Vehicle createVehicle() {
return new Bicycle();
}
}

// 客戶端代碼
public class Client {
public static void main(String[] args) {
VehicleFactory factory = new CarFactory();
factory.deliver(); // 輸出:駕駛汽車

factory = new BicycleFactory();
factory.deliver(); // 輸出:騎自行車
}
}
`

六、與其他模式的關(guān)系

  • 與簡(jiǎn)單工廠模式:工廠方法模式是簡(jiǎn)單工廠模式的進(jìn)一步抽象,解決了簡(jiǎn)單工廠模式違反開閉原則的問題
  • 與抽象工廠模式:工廠方法模式創(chuàng)建單一產(chǎn)品,而抽象工廠模式創(chuàng)建產(chǎn)品族
  • 與模板方法模式:工廠方法模式通常與模板方法模式結(jié)合使用,工廠方法本身可以看作是模板方法模式的一個(gè)特例

七、實(shí)際應(yīng)用

在Java中,工廠方法模式廣泛應(yīng)用于:

  • JDBC中的Connection對(duì)象的創(chuàng)建
  • Spring框架中的BeanFactory
  • Java集合框架中的Iterator工廠方法

##

工廠方法模式通過將對(duì)象的創(chuàng)建延遲到子類,實(shí)現(xiàn)了創(chuàng)建過程的靈活性和擴(kuò)展性。它是面向?qū)ο笤O(shè)計(jì)中“針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程”原則的典型體現(xiàn)。掌握工廠方法模式,能夠幫助開發(fā)者設(shè)計(jì)出更加靈活、可維護(hù)的軟件系統(tǒng)。

如若轉(zhuǎn)載,請(qǐng)注明出處:http://m.0471kd.cn/product/76.html

更新時(shí)間:2026-07-31 04:17:39

產(chǎn)品大全

Top