10軟工-設(shè)計(jì)模式.doc_第1頁
10軟工-設(shè)計(jì)模式.doc_第2頁
10軟工-設(shè)計(jì)模式.doc_第3頁
10軟工-設(shè)計(jì)模式.doc_第4頁
10軟工-設(shè)計(jì)模式.doc_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

院 系: 計(jì)算機(jī)科學(xué)學(xué)院 專 業(yè): 軟件工程 年 級(jí): 2010 課程名稱: 設(shè)計(jì)模式 指導(dǎo)教師: 艾勇 組 號(hào): 學(xué) 號(hào): 09065084 09065109 姓 名: 趙曉宇 崔偉峰 2013 年 10月25 日年級(jí)2010專 業(yè)軟件工程班級(jí)01實(shí)驗(yàn)名稱設(shè)計(jì)模式程序設(shè)計(jì)實(shí)驗(yàn)分項(xiàng)內(nèi)容分項(xiàng)內(nèi)容1、實(shí)驗(yàn)一 創(chuàng)建型模式(Factory模式與Abstract Factory模式)2、實(shí)驗(yàn)二 結(jié)構(gòu)型模式(Adapter模式)3、實(shí)驗(yàn)三 行為型模式(Observer模式)4、5、6、小 組 成 員姓名學(xué)號(hào)組內(nèi)分工自我評(píng)分教師評(píng)分趙曉宇09065084實(shí)驗(yàn)一 實(shí)驗(yàn)三5崔偉峰090651095實(shí)驗(yàn)二 實(shí)驗(yàn)三5小組成績?cè)u(píng)定教師簽名: 年 月 日實(shí)驗(yàn)分項(xiàng)1實(shí)驗(yàn)一 創(chuàng)建型模式(Factory模式與Abstract Factory模式)實(shí)驗(yàn)?zāi)康?、 掌握Factory模式與Abstract Factory模式的意圖及其代碼實(shí)現(xiàn)。2、 了解兩種模式的區(qū)別。實(shí)驗(yàn)要求具體題目用C+或Java語言實(shí)現(xiàn)Factory模式與Abstract Factory模式。系統(tǒng)平臺(tái)VC6.0或以上版本環(huán)境下均可實(shí)驗(yàn)原理及步驟Factory.h#ifndef FACTORY_H#define FACTORY_H/Productclass Productpublic:Product()virtual Product();/繼承自Product的ConcreateProduct子類class ConcreateProduct: public Productpublic:ConcreateProduct();virtual ConcreateProduct();/Creatorclass Creatorpublic:Creator()virtual Creator()void AnOperation();protected:virtual Product* FactoryMethod() = 0;/繼承自Creator的ConcreateCreator子類class ConcreateCreator: public Creatorpublic:ConcreateCreator();virtual ConcreateCreator();protected:virtual Product* FactoryMethod();#endif*Factory.cpp#include Factory.h#include using namespace std;ConcreateProduct:ConcreateProduct()std:cout construction of ConcreateProductn;/創(chuàng)建ConcteateProductConcreateProduct:ConcreateProduct()std:cout destruction of ConcreateProductn;/銷毀ConcteateProductvoid Creator:AnOperation()Product* p = FactoryMethod();std:cout an operation of productn;ConcreateCreator:ConcreateCreator()std:cout construction of ConcreateCreatorn;ConcreateCreator:ConcreateCreator()std:cout destruction of ConcreateCreatorn;Product* ConcreateCreator:FactoryMethod()return new ConcreateProduct();*Main.cpp#include Factory.h#include int main(int argc,char* argv)Creator *p = new ConcreateCreator();p-AnOperation();delete p;system(pause);return 0;實(shí)驗(yàn)結(jié)果及分析心得體會(huì)軟件領(lǐng)域中的設(shè)計(jì)模式為開發(fā)人員提供了一種使用專家設(shè)計(jì)經(jīng)驗(yàn)的有效途徑。真正領(lǐng)悟設(shè)計(jì)模式的精髓是可能一個(gè)漫長的過程,需要大量實(shí)踐經(jīng)驗(yàn)的積累。Factory模式的作用:定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類。Factory Method使一個(gè)類的實(shí)例化延遲到其子類Abstract Factory模式作用:提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無需指定它們具體的類。實(shí)驗(yàn)分項(xiàng)2實(shí)驗(yàn)二 結(jié)構(gòu)型模式(Adapter模式)實(shí)驗(yàn)?zāi)康囊弧⒄莆誂dapter模式的意圖及其代碼實(shí)現(xiàn)實(shí)驗(yàn)要求具體題目用C+或Java語言實(shí)現(xiàn)Adapter模式系統(tǒng)平臺(tái)VC6.0以及以上版本均可以實(shí)驗(yàn)原理及步驟AbstractFactory.h#ifndef ABSTRACTFACTORY_H#define ABSTRACTFACTORY_H/ 抽象基類AbstractProductA,代表產(chǎn)品A的抽象class AbstractProductApublic:AbstractProductA() virtual AbstractProductA();/ 派生類ConcreateProductA1,繼承自AbstractProductA,代表產(chǎn)品A的第一種實(shí)現(xiàn)class ConcreateProductA1: public AbstractProductApublic:ConcreateProductA1();virtual ConcreateProductA1();/ 派生類ConcreateProductA2,繼承自AbstractProductA,代表產(chǎn)品A的第二種實(shí)現(xiàn)class ConcreateProductA2: public AbstractProductApublic:ConcreateProductA2();virtual ConcreateProductA2();/ 抽象基類AbstractProductB,代表產(chǎn)品B的抽象class AbstractProductBpublic:AbstractProductB() virtual AbstractProductB();/ 派生類ConcreateProductB1,繼承自AbstractProductB,代表產(chǎn)品B的第一種實(shí)現(xiàn)class ConcreateProductB1: public AbstractProductBpublic:ConcreateProductB1();virtual ConcreateProductB1();/ 派生類ConcreateProductB2,繼承自AbstractProductB,代表產(chǎn)品B的第二種實(shí)現(xiàn)class ConcreateProductB2: public AbstractProductBpublic:ConcreateProductB2();virtual ConcreateProductB2();/ 抽象基類AbstractFactory,工廠的抽象類,生產(chǎn)產(chǎn)品A和產(chǎn)品Bclass AbstractFactorypublic:AbstractFactory()virtual AbstractFactory()virtual AbstractProductA* CreateProductA() = 0;virtual AbstractProductB* CreateProductB() = 0;/ 派生類ConcreateFactory1,繼承自AbstractFactory/ 生產(chǎn)產(chǎn)品A和產(chǎn)品B的第一種實(shí)現(xiàn)class ConcreateFactory1: public AbstractFactorypublic:ConcreateFactory1();virtual ConcreateFactory1();virtual AbstractProductA* CreateProductA();virtual AbstractProductB* CreateProductB();/ 派生類ConcreateFactory2,繼承自AbstractFactory/ 生產(chǎn)產(chǎn)品A和產(chǎn)品B的第二種實(shí)現(xiàn)class ConcreateFactory2: public AbstractFactorypublic:ConcreateFactory2();virtual ConcreateFactory2();virtual AbstractProductA* CreateProductA();virtual AbstractProductB* CreateProductB();#endif*AbstractFactory.cpp#include #include AbstractFactory.hConcreateProductA1:ConcreateProductA1()std:cout construction of ConcreateProductA1n;ConcreateProductA1:ConcreateProductA1()std:cout destruction of ConcreateProductA1n;ConcreateProductA2:ConcreateProductA2()std:cout construction of ConcreateProductA2n;ConcreateProductA2:ConcreateProductA2()std:cout destruction of ConcreateProductA2n;ConcreateProductB1:ConcreateProductB1()std:cout construction of ConcreateProductB1n;ConcreateProductB1:ConcreateProductB1()std:cout destruction of ConcreateProductB1n;ConcreateProductB2:ConcreateProductB2()std:cout construction of ConcreateProductB2n;ConcreateProductB2:ConcreateProductB2()std:cout destruction of ConcreateProductB2n;ConcreateFactory1:ConcreateFactory1()std:cout construction of ConcreateFactory1n;ConcreateFactory1:ConcreateFactory1()std:cout destruction of ConcreateFactory1n;AbstractProductA* ConcreateFactory1:CreateProductA()return new ConcreateProductA1();AbstractProductB* ConcreateFactory1:CreateProductB()return new ConcreateProductB1();ConcreateFactory2:ConcreateFactory2()std:cout construction of ConcreateFactory2n;ConcreateFactory2:ConcreateFactory2()std:cout destruction of ConcreateFactory2n;AbstractProductA* ConcreateFactory2:CreateProductA()return new ConcreateProductA2();AbstractProductB* ConcreateFactory2:CreateProductB()return new ConcreateProductB2();*Main.cpp#include AbstractFactory.h#include int main()/ 生產(chǎn)產(chǎn)品A的第一種實(shí)現(xiàn)ConcreateFactory1 *pFactory1 = new ConcreateFactory1;AbstractProductA *pProductA = pFactory1-CreateProductA();/ 生產(chǎn)產(chǎn)品B的第二種實(shí)現(xiàn)ConcreateFactory2 *pFactory2 = new ConcreateFactory2;AbstractProductB *pProductB = pFactory2-CreateProductB();delete pFactory1;delete pProductA;delete pFactory2;delete pProductB;system(pause);return 0;實(shí)驗(yàn)結(jié)果及分析心得體會(huì)Adapter模式的作用:將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。Adapt模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。實(shí)驗(yàn)分項(xiàng)3實(shí)驗(yàn)三 行為型模式(Observer模式)實(shí)驗(yàn)?zāi)康囊?、掌握Observer模式的意圖及其代碼實(shí)現(xiàn)。實(shí)驗(yàn)要求具體題目用C+或Java語言實(shí)現(xiàn)Observer模式系統(tǒng)平臺(tái)VC6.0以及以上版本均可以實(shí)驗(yàn)原理及步驟Observer.h#ifndef OBSERVER_H#define OBSERVER_H#include typedef int STATE;class Observer;/ Subject 抽象基類,只需要知道Observer基類的聲明就可以了class Subjectpublic:Subject() : m_nSubjectState(-1)virtual Subject();void Notify(); / 通知對(duì)象改變狀態(tài)void Attach(Observer *pObserver); / 新增對(duì)象void Detach(Observer *pObserver); / 刪除對(duì)象/ 虛函數(shù),提供默認(rèn)的實(shí)現(xiàn),派生類可以自己實(shí)現(xiàn)來覆蓋基類的實(shí)現(xiàn)virtual void SetState(STATE nState); / 設(shè)置狀態(tài)virtual STATE GetState(); / 得到狀態(tài)protected:STATE m_nSubjectState; / 模擬保存Subject狀態(tài)的變量std:list m_ListObserver; / 保存Observer指針的鏈表;/ Observer抽象基類class Observerpublic:Observer() : m_nObserverState(-1)virtual Observer()/ 純虛函數(shù),各個(gè)派生類可能有不同的實(shí)現(xiàn)/ 通知Observer狀態(tài)發(fā)生了變化virtual void Update(Subject* pSubject) = 0;protected:STATE m_nObserverState; / 模擬保存Observer狀態(tài)的變量;/ ConcreateSubject類,派生在Subject類class ConcreateSubject: public Subjectpublic:ConcreateSubject() : Subject()virtual ConcreateSubject()/ 派生類自己實(shí)現(xiàn)來覆蓋基類的實(shí)現(xiàn)virtual void SetState(STATE nState); / 設(shè)置狀態(tài)virtual STATE GetState(); / 得到狀態(tài);/ ConcreateObserver類派生自O(shè)bserverclass ConcreateObserver: public Observerpublic:ConcreateObserver() : Observer()virtual ConcreateObserver()/ 虛函數(shù),實(shí)現(xiàn)基類提供的接口virtual void Update(Subject* pSubject);#endif*Observer.cpp#include Observer.h#include #include /* -| Subject 類成員函數(shù)的實(shí)現(xiàn)|-*/void Subject:Attach(Observer *pObserver)std:cout Attach an Observern;m_ListObserver.push_back(pObserver);void Subject:Detach(Observer *pObserver)std:list:iterator iter;iter = std:find(m_ListObserver.begin(), m_ListObserver.end(), pObserver);if (m_ListObserver.end() != iter)m_ListObserver.erase(iter);std:cout Detach an Observern;void Subject:Notify()std:cout Notify Observerss Staten;std:list:iterator iter1, iter2;for (iter1 = m_ListObserver.begin(), iter2 = m_ListObserver.end();iter1 != iter2;+iter1)(*iter1)-Update(this);void Subject:SetState(STATE nState)std:cout SetState By Subjectn;m_nSubjectState = nState;STATE Subject:GetState()std:cout GetState By Subjec

溫馨提示

  • 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論