日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

2.3 Factory Method(工厂方法)

發(fā)布時(shí)間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2.3 Factory Method(工厂方法) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【返回目錄】

我們現(xiàn)在把場(chǎng)景從險(xiǎn)象叢生的特工戰(zhàn)切換到更為壯觀的二戰(zhàn)中來(lái),很多人都看過(guò)《拯救大兵瑞恩》,這部電影最著名的兩場(chǎng)戰(zhàn)斗非首和尾莫屬,我們就用最后一場(chǎng)戰(zhàn)役來(lái)舉例說(shuō)明什么是工廠方法吧。

相比諾曼底登陸,最后一場(chǎng)戰(zhàn)役出現(xiàn)了更多的武器,天上飛的、地上爬的都有,那么Tom Hanks還能一把M1A1就走遍天下嗎,顯然不可能,M1A1對(duì)付步兵很不錯(cuò),但要想搞定一輛坦克就很困難了,用它來(lái)對(duì)付戰(zhàn)斗機(jī),純屬扯淡。所以在最后一場(chǎng)戰(zhàn)役中出現(xiàn)的武器也是多元化的,負(fù)責(zé)瞭望的狙擊手用的是M1903A4狙擊步槍、像Tom Hanks這樣的軍官用的是湯姆森M1A1沖鋒槍、普通士兵用的是伽蘭德步槍、對(duì)付坦克用到了TNT***、收拾坦克中的殘兵用的是手榴彈……總之,武器只有用在合適的目標(biāo)上在能發(fā)揮最大的威力。那么怎么才能知道我到底該用那種武器呢?Tom Hanks絕不可能戰(zhàn)斗前先跟每個(gè)士兵交代清楚他應(yīng)該用什么樣的武器,因?yàn)楦緵](méi)人知道他們到底會(huì)面對(duì)什么樣的敵人,所以按套路出牌是行不通的,就只能具體問(wèn)題具體分析了。

同樣的,我們?cè)诰帉?xiě)程序時(shí)可能也常常會(huì)碰到類似的問(wèn)題,我并不知道當(dāng)前會(huì)碰到什么樣的需求,所以我不能確定到底應(yīng)該返回給調(diào)用者一個(gè)什么對(duì)象,在這種情況下,就不得不把決定權(quán)下放給負(fù)責(zé)生成對(duì)象的子類了。這也正是Factory Method(工廠方法)模式所適用的場(chǎng)景,我們來(lái)看看下面的代碼就一目了然了:

1: using System; 2:? 3: namespace Autumoon.DesignPatterns.FactoryMethod 4: { 5: public abstract class WeaponBase 6: { 7: public string Name { get; set; } 8:? 9: public abstract void Use(object target); 10: } 11:? 12: public class Gun : WeaponBase 13: { 14: public bool IsAuto { get; set; } 15:? 16: public override void Use(object target) 17: { 18: // TODO: Use this weapon to kill target. 19: } 20: } 21:? 22: public class Bomb : WeaponBase 23: { 24: public int Power { get; set; } 25:? 26: public override void Use(object target) 27: { 28: // TODO: Use this weapon to kill target. 29: } 30: } 31:? 32: public abstract class AbstractBattle 33: { 34: public abstract WeaponBase CreateWeaponByTargetType(string targetType); 35: } 36:? 37: public class Battle : AbstractBattle 38: { 39: public override WeaponBase CreateWeaponByTargetType(string targetType) 40: { 41: switch (targetType) 42: { 43: case "Soldier": 44: return new Gun { Name = "M1A1", IsAuto = true }; 45: case "Tank": 46: return new Bomb { Name = "TNT", Power = 1000 }; 47: default: 48: return null; 49: } 50: } 51: } 52: }

這個(gè)時(shí)候,Tom Hanks和他的戰(zhàn)友們聽(tīng)到了遠(yuǎn)處的坦克聲,是戰(zhàn)斗的時(shí)候了,拿起武器,沖向勝利!

1: Battle bridgeBattle = new Battle(); 2: Gun m1a1 = bridgeBattle.CreateWeaponByTargetType("Soldier") as Gun; 3: Bomb tnt = bridgeBattle.CreateWeaponByTargetType("Tank") as Bomb;

轉(zhuǎn)載于:https://www.cnblogs.com/Autumoon/archive/2007/12/05/984044.html

總結(jié)

以上是生活随笔為你收集整理的2.3 Factory Method(工厂方法)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。