




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、我的空間(kngjin) 主頁(zh y)|空間(kngjin)裝扮博客|寫新文章相冊(cè)|上傳照片好友|找新朋友檔案|留言板我的應(yīng)用 loading. 我的i貼吧 i動(dòng)態(tài)傳送門我的動(dòng)態(tài)jljHappyDay 1 | 我的消息(0/0) | 我的空間 | 我的應(yīng)用 | 我的i貼吧 | 百度空間 | 百度首頁 | 退出 踏浪帥的空間ASP.NET C# 資料收藏 主頁博客相冊(cè)|個(gè)人檔案 |好友 查看文章 NET設(shè)計(jì)模式(4): 抽象工廠模式(實(shí)例代碼)2009-11-29 00:18實(shí)例:大家知道,動(dòng)物世界中各大陸的動(dòng)物是不一樣的,各種動(dòng)物可以分成兩樣,一種食草,一種食肉。食肉的動(dòng)物吃食草動(dòng)物。美洲
2、狼屬于食肉動(dòng)物,野牛屬于食草動(dòng)物,美洲狼吃野牛。非洲的獅子屬于食肉動(dòng)物,角馬屬于食草動(dòng)物,獅子吃角馬。類圖如下:代碼:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace AnimalWorld / 抽象大陸工廠 abstract class ContinentFactory abstract public Herbivore CreateHerbivore(); /抽象創(chuàng)建食草動(dòng)物的類,返回食草類動(dòng)物 abstract public Carnivore Creat
3、eCarnivore(); /抽象創(chuàng)建食肉動(dòng)物的類,返回食肉類動(dòng)物 /非洲大陸,有角馬,獅子 class AfricaFactory : ContinentFactory /非洲動(dòng)物工廠類 override public Herbivore CreateHerbivore() /實(shí)現(xiàn)上面的抽象方法,注意返回類型 return new Wildebeest(); /實(shí)例化一個(gè)角馬,角馬是食草動(dòng)物 override public Carnivore CreateCarnivore() /實(shí)現(xiàn)上面的抽象方法,注意返回類型 return new Lion(); /實(shí)例化一個(gè)(y )獅子,獅子是食肉動(dòng)物
4、 / 美洲(mi zhu)大陸,有狼,野牛(yni) class AmericaFactory : ContinentFactory /同上,美洲動(dòng)物工廠類 override public Herbivore CreateHerbivore() return new Bison(); /野牛 override public Carnivore CreateCarnivore() return new Wolf(); /狼 /食草動(dòng)物 abstract class Herbivore /抽象食草類 /肉食動(dòng)物 abstract class Carnivore /抽象食肉類 /獵食食草動(dòng)物的方法
5、abstract public void Eat(Herbivore h); /抽象吃方法,傳入食草動(dòng)物為參數(shù) /角馬 class Wildebeest : Herbivore /繼承食草 /獅子 class Lion : Carnivore /重載獵食食草動(dòng)物的方法 override public void Eat(Herbivore h) /重寫吃方法 Console.WriteLine(this + eats + h); /this代表本身 /野牛 class Bison : Herbivore /狼 class Wolf : Carnivore /重載獵食(li sh)食草動(dòng)物的方法
6、override public void Eat(Herbivore h) Console.WriteLine(this + eats + h); /動(dòng)物(dngw)世界類 class AnimalWorld private Herbivore herbivore; /變量(binling),返回食草抽象類 private Carnivore carnivore; / 創(chuàng)建兩種動(dòng)物分類 public AnimalWorld(ContinentFactory factory) carnivore = factory.CreateCarnivore(); herbivore = factory.C
7、reateHerbivore(); /運(yùn)行食物鏈 public void RunFoodChain() /肉食動(dòng)物獵食食草動(dòng)物 carnivore.Eat(herbivore); / / 抽象工廠模式客戶應(yīng)用測(cè)試 / class GameApp static void Main(string args) /創(chuàng)造并運(yùn)行非洲動(dòng)物世界 ContinentFactory africa = new AfricaFactory(); AnimalWorld world = new AnimalWorld(africa); world.RunFoodChain(); /創(chuàng)造并運(yùn)行美洲動(dòng)物世界 Contine
8、ntFactory america = new AmericaFactory(); world = new AnimalWorld(america); world.RunFoodChain(); Console.Read(); 實(shí)例二:(增加亞洲食肉虎,亞洲食草兔)代碼紅色(hngs)為增加上去了!其它不變using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace AnimalWorld / 抽象(chuxing)大陸工廠 abstract class Continent
9、Factory abstract public Herbivore CreateHerbivore(); /抽象創(chuàng)建(chungjin)食草動(dòng)物的類,返回食草類動(dòng)物 abstract public Carnivore CreateCarnivore(); /抽象創(chuàng)建食肉動(dòng)物的類,返回食肉類動(dòng)物 /非洲大陸,有角馬,獅子 class AfricaFactory : ContinentFactory /非洲動(dòng)物工廠類 override public Herbivore CreateHerbivore() /實(shí)現(xiàn)上面的抽象方法,注意返回類型 return new Wildebeest(); /實(shí)例化
10、一個(gè)角馬,角馬是食草動(dòng)物 override public Carnivore CreateCarnivore() /實(shí)現(xiàn)上面的抽象方法,注意返回類型 return new Lion(); /實(shí)例化一個(gè)獅子,獅子是食肉動(dòng)物 / 美洲大陸,有狼,野牛 class AmericaFactory : ContinentFactory /同上,美洲動(dòng)物工廠類 override public Herbivore CreateHerbivore() return new Bison(); /野牛 override public Carnivore CreateCarnivore() return new W
11、olf(); /狼 /亞洲(y zhu)大陸,有虎,兔子 class AsiaFactory : ContinentFactory public override Herbivore CreateHerbivore() return new rabbit(); public override Carnivore CreateCarnivore() return new tiger(); /食草動(dòng)物 abstract class Herbivore /抽象(chuxing)食草類 /肉食動(dòng)物(ru sh dn w) abstract class Carnivore /抽象食肉類 /獵食食草動(dòng)物的
12、方法 abstract public void Eat(Herbivore h); /抽象吃方法,傳入食草動(dòng)物為參數(shù) /角馬 class Wildebeest : Herbivore /繼承食草 /獅子 class Lion : Carnivore /重載獵食食草動(dòng)物的方法 override public void Eat(Herbivore h) /重寫吃方法 Console.WriteLine(this + eats + h); /this代表本身 /野牛 class Bison : Herbivore /狼 class Wolf : Carnivore /重載(zhn zi)獵食食草動(dòng)物
13、的方法 override public void Eat(Herbivore h) Console.WriteLine(this + eats + h); /兔子(t zi)類 class rabbit:Herbivore /老虎(loh) class tiger : Carnivore public override void Eat(Herbivore h) Console.WriteLine(this + eats + h); /動(dòng)物世界類 class AnimalWorld private Herbivore herbivore; /變量,返回食草抽象類 private Carnivo
14、re carnivore; / 創(chuàng)建兩種動(dòng)物分類 public AnimalWorld(ContinentFactory factory) carnivore = factory.CreateCarnivore(); herbivore = factory.CreateHerbivore(); /運(yùn)行食物鏈 public void RunFoodChain() /肉食動(dòng)物獵食食草動(dòng)物 carnivore.Eat(herbivore); / / 抽象工廠模式客戶應(yīng)用測(cè)試 / class GameApp static void Main(string args) /創(chuàng)造并運(yùn)行(ynxng)非洲動(dòng)物
15、世界 ContinentFactory africa = new AfricaFactory(); AnimalWorld world = new AnimalWorld(africa); world.RunFoodChain(); /創(chuàng)造(chungzo)并運(yùn)行美洲動(dòng)物世界 ContinentFactory america = new AmericaFactory(); world = new AnimalWorld(america); world.RunFoodChain(); /創(chuàng)建并運(yùn)行亞洲動(dòng)物(dngw)世界 ContinentFactory asia = new AsiaFactory(); world = new AnimalWorld(asia); world.RunFoodChain(); Console.Read(); *個(gè)人理解:抽象工廠的主要優(yōu)點(diǎn)是隔離了具體類的生成,使得客戶不需要知道什么被創(chuàng)建的。由于這種隔離,更換一個(gè)具體工廠就變得相對(duì)容易。的有的具體工廠都實(shí)現(xiàn)的抽象工廠中定義的那些接口,因此只要必變具體工廠的實(shí)例,就可以在某種程序上改變整個(gè)軟件系統(tǒng)的行為。抽象工廠的不足:在增加新的產(chǎn)品對(duì)象時(shí),難以擴(kuò)展抽象工廠以便生產(chǎn)新種類的產(chǎn)品。這是因?yàn)镃ontinentFact
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)藥店合作合同范本
- 丹麥工作合同范本
- 辦理消防驗(yàn)收合同范本
- 個(gè)人工資合同范本
- 入股公司項(xiàng)目合同范本
- 2024年云浮聯(lián)通招聘考試真題
- 東莞代理記賬合同范本
- 2025東風(fēng)公司全球校園招聘筆試參考題庫(kù)附帶答案詳解
- 買賣車訂金合同范本
- 2024年河南濮陽工學(xué)院籌建處 引進(jìn)考試真題
- 退役軍人優(yōu)待證申領(lǐng)表
- Q∕SY 19001-2017 風(fēng)險(xiǎn)分類分級(jí)規(guī)范
- 勞務(wù)分包項(xiàng)目經(jīng)理崗位職責(zé)
- 幼兒繪本故事:奇怪的雨傘店
- 鋼琴基礎(chǔ)教程教案
- 糖基轉(zhuǎn)移酶和糖苷酶課件(PPT 111頁)
- 屋面網(wǎng)架結(jié)構(gòu)液壓提升施工方案(50頁)
- (語文A版)四年級(jí)語文下冊(cè)課件跳水 (2)
- 第6章向量空間ppt課件
- 醫(yī)療機(jī)構(gòu)聘用(返聘)證明
- 【單元設(shè)計(jì)】第七章《萬有引力與宇宙航行》單元教學(xué)設(shè)計(jì)及教材分析課件高一物理人教版(2019)必修第二冊(cè)
評(píng)論
0/150
提交評(píng)論