《設(shè)計(jì)模式02》-工廠方法_第1頁
《設(shè)計(jì)模式02》-工廠方法_第2頁
《設(shè)計(jì)模式02》-工廠方法_第3頁
《設(shè)計(jì)模式02》-工廠方法_第4頁
《設(shè)計(jì)模式02》-工廠方法_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第二部分 創(chuàng)建型設(shè)計(jì)模式v工廠方法模式(Factory Method Pattern)v簡單工廠模式(Simple Factory Pattern)v單件模式(Singleton Pattern)v構(gòu)造器模式(Builder Pattern)v原型模式(Prototype Pattern)v抽象工廠模式(Abstract Factory Pattern)工廠方法模式CreateAndUse()class Clientpublic:void CreateAndUse() int sum = 0;Dog * dog = new Dog;sum+= dog-Sale();delete dog;Cat

2、 * cat = new Cat;sum+= cat-Sale();delete cat;Fish * fish = new Fish;sum+= fish-Sale();delete fish;coutsumSale(); delete ani ; IAnimal * ani = new Cat;sum+= cat-Sale();delete ani ; IAnimal * ani = new Fish;sum+= ani Sale();delete ani ;coutsumSale();delete ani;IAnimal * ani = CreateCat();sum+= ani-Sal

3、e();delete ani;IAnimal * ani = CreateFish();sum+= ani-Sale();delete ani;cout“Total Sale:”Sale();delete ani;IAnimal * ani = fac. CreateCat();sum+= ani-Sale();delete ani;IAnimal * ani = fac. CreateFish();sum+= ani-Sale();delete ani;cout“Total Sale:”Sale();delete ani;IAnimal * ani = fac. CreateAnimal(C

4、);sum+= ani-Sale();delete ani;IAnimal * ani = fac. CreateAnimal(F);sum+= ani-Sale();delete ani;cout“Total Sale:”Crete課程(1); 課程 * c2 = fac-Crete課程(2); .工廠方法模式例-多工廠課 程英 語軟 件 工 程學(xué) 生+Sduty()Factory+Create課程()return new 軟件工程();void 學(xué)生:Study( ) Factory * fac1 = new 軟件工程Factory( ); 課程 * c1 = fac1-Crete課程()

5、; Factory * fac2 = new 專業(yè)英語Factory( ); 課程 * c2 = fac-Crete課程(); .基 礎(chǔ) 英 語專 業(yè) 英 語英 語 Factory+Create課程()軟 件 工 程 Factory+Create課程()基 礎(chǔ) 英 語 Factory+Create課程()專 業(yè) 英 語 Factory+Create課程()return new 英語();return new 基礎(chǔ)英語();return new 專業(yè)英語();工廠方法模式結(jié)構(gòu)Client-fac1: Creator-fac2: Creator-prod1: Product-prod2: Prod

6、uct+CreateAndUse()Creator+FactoryMethod(): ProductConcreteCreator1+FactoryMethod(): ProductConcreteCreator2+FactoryMethod(): ProductProductProductAProductBreturn new ProductBreturn new ProductA工廠方法模式總結(jié)v定義一個(gè)創(chuàng)建產(chǎn)品的接口(頂層工廠類),而由該接口的子類(具體工廠類),決定具體實(shí)例化哪種產(chǎn)品。v即將產(chǎn)品的實(shí)例化延遲到接口的子類(具體工廠類)中。v也稱多態(tài)性工廠方法多態(tài)性工廠方法模式或虛擬構(gòu)造子

7、虛擬構(gòu)造子模式工廠方法模式的適用性v優(yōu)點(diǎn)擴(kuò)展產(chǎn)品時(shí),完全支持開閉原則;v新增子類產(chǎn)品v新增產(chǎn)品樹v用同構(gòu)的產(chǎn)品樹替換原有產(chǎn)品樹具有對應(yīng)的層次結(jié)構(gòu),Client只通過產(chǎn)品的抽象接口交互,不必明確知道具體的產(chǎn)品v不足子類數(shù)量可能較多(有時(shí)可用類模版減少子類數(shù)量)迷宮游戲例-工廠方法模式Class MazeFactoryPublic: Maze * CreateMaze( ) ; /工廠方法 virtual Maze * MakeMaze() const return new Maze; /模版方法模式 virtual Room * MakeRoom() const return new Room;

8、 virtual Wall * MakeRoom(int n) return new Room(n); virtual Door * MakeDoor( Room* r1,Room * r2) const return new Door(r1,r2); ; Maze * CreateMaze( ) Maze * aMaze = MakeMaze(); Room * r1 = MakeRoom(1); Room * r1 =.MakeRoom(2); Door * door =MakeDoor(r1,r2); aMaze-AddRoom(r1); aMaze-AddRoom(r2); r1-Se

9、tSide(North,makeWall(); r1-SetSide(East,door); r1-SetSide(South,makeWall(); r1-SetSide(West,makeWall(); r2-SetSide(North,makeWall(); r2-SetSide(East, makeWall(); r2-SetSide(South,makeWall(); r2-SetSide(West,door); return aMaze; MazeFactory的子類BombedMazeFactoryclass BombedMazeFactory:public MazeFactor

10、 Public: BombedMazeFactory(); virtual Wall * MakeWall() const return new BombedWall; virtual Room * MakeRoom(int n) const return new RoomWithABomb(n); ;MazeFactory的子類EnchantedMazeFactoryclass EnchantedMazeFactory:public MazeFactroy public: EnchantedMazeFactory(); virtual Room* MakeRoom(int n) const

11、return new EnchantedRoom(n,CastSpell(); Virtual Door * MakeDoor(Room * r1,Room * r2) const return new DoorNeedingSpell(r1,r2); protected: Spell * CastSpell() const;Factory的使用Class GamePublic: Game(MazeFactory & fac ) aMaze = fac.CreateMaze(); Private: Maze * aMaze;Factory中的CreateMaze也可以放到Game中。Class GamePublic: Game(MazeFactory & fac ) aMaze = CreateMaze(fac); Protected: Maze * CreateMaze(MazeFactory & fac ) /將例中的MakeRoom等改成 /fac.MakeRoom。略Pri

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論