2 3 Factory Method(工廠方法)

2021-09-05 18:13:33 字數 2165 閱讀 5445

【返回目錄】

我們現在把場景從險象叢生的**戰切換到更為壯觀的二戰中來,很多人都看過《拯救大兵瑞恩》,這部電影最著名的兩場戰鬥非首和尾莫屬,我們就用最後一場戰役來舉例說明什麼是工廠方法吧。

相比諾曼第登陸,最後一場戰役出現了更多的**,天上飛的、地上爬的都有,那麼tom hanks還能一把m1a1就走遍天下嗎,顯然不可能,m1a1對付步兵很不錯,但要想搞定一輛坦克就很困難了,用它來對付戰鬥機,純屬扯淡。所以在最後一場戰役中出現的**也是多元化的,負責瞭望的狙擊手用的是m1903a4狙擊步槍、像tom hanks這樣的軍官用的是湯姆森m1a1衝鋒槍、普通士兵用的是伽蘭德步槍、對付坦克用到了tnt***、收拾坦克中的殘兵用的是手榴彈……總之,**只有用在合適的目標上在能發揮最大的威力。那麼怎麼才能知道我到底該用那種**呢?tom hanks絕不可能戰鬥前先跟每個士兵交代清楚他應該用什麼樣的**,因為根本沒人知道他們到底會面對什麼樣的敵人,所以按套路出牌是行不通的,就只能具體問題具體分析了。

同樣的,我們在編寫程式時可能也常常會碰到類似的問題,我並不知道當前會碰到什麼樣的需求,所以我不能確定到底應該返回給呼叫者乙個什麼物件,在這種情況下,就不得不把決定權下放給負責生成物件的子類了。這也正是factory method(工廠方法)模式所適用的場景,我們來看看下面的**就一目了然了:

1:

using system;

2:
3:

namespace autumoon.designpatterns.factorymethod

4:
8:
9:

public

abstract

void use(object target);

10:     }
11:
12:

public

class gun : weaponbase

13:
15:
16:

public

override

void use(object target)

17:
20:     }
21:
22:

public

class bomb : weaponbase

23:
25:
26:

public

override

void use(object target)

27:
30:     }
31:
32:

public

abstract

class abstractbattle

33:
36:
37:

public

class battle : abstractbattle

38:     ;
45:

case

"tank":

46:

return

new bomb ;

47:

default:

48:

return

null;

49:             }
50:         }
51:     }
52: }
這個時候,tom hanks和他的戰友們聽到了遠處的坦克聲,是戰鬥的時候了,拿起**,衝向勝利!

Factory Method設計模式

一 工廠方法 factory method 模式 工廠方法 factorymethod 模式是類的建立模式,其用意是定義乙個建立產品物件的工廠介面,將實際建立工作推遲到子類中。工廠方法模式是簡單工廠模式的進一步抽象和推廣。由於使用了多型性,工廠方法模式保持了簡單工廠模式的優點,而且克服了它的缺點。在...

工廠模式(Factory Method

意圖 工廠方法模式 factory method pattern 工廠方法模式又稱為 工廠模式 也叫虛擬構造器 virtual constructor 模式或者 多型模式 屬於類的建立型模式。在工廠方法模式中,父類負責定義建立物件 的公共介面,而子類則負責生成具體的物件,這樣做的目的是將類的例項化操...

Factory Method(工廠模式)

定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個。工廠方法讓類把例項化推遲到子類。將產品的 實現 從 使用 中解耦 1.當乙個類不知道它所必須建立的物件的類的時候 2.當乙個類希望由它的子類來指定它所建立的物件的時候 3.當想將建立物件的職責委託給多個幫助子類中的某乙個,並且希望將哪乙個幫...