




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1 . 簡(jiǎn)述“開閉”原則的基本思想。請(qǐng)舉出一個(gè)使用了軟件“開閉”原則的軟件設(shè)計(jì)模式,其中何處體現(xiàn)了“開閉”原則。答: “開閉”原則:軟件實(shí)體應(yīng)當(dāng)對(duì)擴(kuò)展開放,而對(duì)修改關(guān)閉, “開 - 閉”原則要求軟件系統(tǒng)能夠在不需要修改原有類的基礎(chǔ)上,通過增加類達(dá)到擴(kuò)展功能的目的。Abstract factory 體現(xiàn)了這個(gè)原則,如果想增加一類新的 products ,只需在 product 類體系中增加各個(gè)products ,然后在 factory 類體系結(jié)構(gòu)中增加一個(gè)concrete factory 就可以了,而不需要對(duì)現(xiàn)有類做任何修改, The Open-closed principleocp 在不改動(dòng)過
2、模塊源代碼的情況下擴(kuò)展模塊的行為。軟件實(shí)體(類模塊 函數(shù)等)應(yīng)該是可以擴(kuò)展的,但是不可以修改的。2 . 簡(jiǎn)述依賴?yán)D(zhuǎn)原則的基本思想。請(qǐng)舉出一個(gè)使用了軟件依賴原則的軟件設(shè)計(jì)模式,其中何處體現(xiàn)了依賴原則。答:依賴倒置原則的基本思想是:高層模塊不應(yīng)該依賴于低層模塊,二者都應(yīng)該依賴于抽象。抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該不依賴于抽象。Tomplate method就體現(xiàn)了這個(gè)原則,它定義了一個(gè)操作中的算法骨架,而將一些步驟延遲到子類中, template method 使得子類不改變一個(gè)算法的結(jié)構(gòu),即可重定義該算法的某些特定步驟。3 . 什么是單一職責(zé)原則?請(qǐng)舉出一個(gè)使用了單一職責(zé)原則的軟件設(shè)計(jì)模式,其
3、中何處體現(xiàn)了單一職責(zé)原則。答:基本思想:SRP使得一個(gè)類或一個(gè)模塊承擔(dān)的責(zé)任盡可能的少,使盡可能少的因素 或動(dòng)機(jī)影響該類或該模塊,即增大類或模塊的內(nèi)聚性,減少其耦合度,SRP是所有原則中最簡(jiǎn)單的之一,也是最難正確運(yùn)用的之一。COMMAND式體現(xiàn)了 SRP原則,大多數(shù)類都是一組方法和相應(yīng)的一組變量的結(jié)合,而該模式只是封裝了一個(gè)沒有任何變量的函數(shù),它對(duì)函數(shù)的關(guān)注超過了類,將一個(gè)請(qǐng)求封裝為一 個(gè)對(duì)象,從而可用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化。4 . 軟件復(fù)用可采用類的繼承方式和類的聚合方式,比較兩者的優(yōu)缺點(diǎn)。答:聚合:一個(gè)對(duì)象擁有另一個(gè)對(duì)象或?qū)α硪粋€(gè)對(duì)象負(fù)責(zé)(即一個(gè)對(duì)象包含另一個(gè)對(duì)象或是另一個(gè)對(duì)象的一部分
4、)并且聚合對(duì)象和其所有具有相同的生命周期(即所謂的“同生共死”關(guān)系) 。聚合復(fù)用優(yōu)點(diǎn):容器類僅能通過被包含對(duì)象的接口來對(duì)其進(jìn)行訪問?!昂诤小睆?fù)用, 因?yàn)楸话瑢?duì)象的內(nèi)部細(xì)節(jié)對(duì)外是不可見。包裝性好。實(shí)現(xiàn)上的相互依賴性比較小。 每一個(gè)類只專注于一項(xiàng)任務(wù)。通過獲取指定其他的具有相同類型的對(duì)象的使用,可以在運(yùn) 行期間動(dòng)態(tài)地定義(對(duì)象的)組合。聚合的缺點(diǎn):導(dǎo)致系統(tǒng)中的對(duì)象過多為了能將多個(gè)不同的對(duì)象作為組合塊來使用,必須仔細(xì)地對(duì)接口進(jìn)行定義。類繼承:是一種通過擴(kuò)展(一個(gè)已有對(duì)象的)實(shí)現(xiàn),從而獲得新功能的復(fù)用方法。繼承的優(yōu)點(diǎn):容易進(jìn)行新的實(shí)現(xiàn),因?yàn)槠浯蠖鄶?shù)可繼承而來 易于修改或擴(kuò)展那些被 復(fù)用的實(shí)現(xiàn)。繼承的
5、缺點(diǎn):破壞了封裝性,因?yàn)檫@會(huì)將父類的實(shí)現(xiàn)細(xì)節(jié)暴露給子類 “白盒”復(fù)用, 因?yàn)楦割惖膬?nèi)部細(xì)節(jié)對(duì)于子類而言通常是可見的 當(dāng)父類的實(shí)現(xiàn)更改時(shí),子類也不得不隨之 更改從父類繼承來的實(shí)現(xiàn)將不能在運(yùn)行期間進(jìn)行改變。5 .畫出工廠方法模式的結(jié)構(gòu)圖。什么情況下適合使用工廠方發(fā)模式?其中product :為工廠模式所要?jiǎng)?chuàng)建的對(duì)象類型定義一個(gè)接口。Concrete product:實(shí)現(xiàn) product 接口。Creator :聲明工廠方法(factory method )返回值為product的一個(gè)對(duì)象。Concrete creator :覆寫 factory Method() ,返回值為 concrete pr
6、oduct的一個(gè)具體實(shí)例。在下面情況下你可以考慮使用工廠方法模式:1)當(dāng)客戶程序不需要知道要使用對(duì)象的創(chuàng)建過程。2)客戶程序使用的對(duì)象存在變動(dòng)的可能,或者根本就不知道使用哪一個(gè)具體的對(duì)象。6 .畫出合成模式(Composite)的結(jié)構(gòu)圖。舉例說明一個(gè)可以應(yīng)用合成模式的軟件設(shè)計(jì) 實(shí)例,說明其中各角色的作用。實(shí)例:計(jì)算機(jī)和立體組合音響這樣的設(shè)備經(jīng)常被組裝成一部分整體層次結(jié)構(gòu)或者是容器 層次結(jié)構(gòu),例如:底盤可以包含驅(qū)動(dòng)裝置和平面板,總線含有多個(gè)插件,機(jī)柜包括底盤、總 線等。這樣結(jié)構(gòu)很自然的用composite模式進(jìn)行模擬。Equipment類為在部分整體層次結(jié)構(gòu)中的所有設(shè)備定義一個(gè)接口。Equipm
7、ent聲明一些操作返回一個(gè)設(shè)備的屬性,例如它的能是消耗和價(jià)格。子類為指定的設(shè)備實(shí)現(xiàn)了這些操作, Equipment還聲明了一個(gè) Create Iterator操作,該操作為訪問它的零件返回一個(gè) Iterator ,這個(gè)操作的缺省實(shí)現(xiàn)返回一上 NullIterator ,它在空集上迭代。Composite Equipment是包含其它設(shè)備的基類,它也是 Equipment的子類。7 .簡(jiǎn)述門面模式(Facade)和中介者模式(Mediator )的基本思想,兩者的差異何在? 答:門面模式(facade)又稱外觀模式?;舅枷耄簽樽酉到y(tǒng)中的一組接口提供一個(gè)一 致的界面,F(xiàn)acade模式定義了一個(gè)高
8、層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用?!爸薪檎吣J健被舅枷耄篗ediator Pattern中文譯為“中介者模式”、“調(diào)停者模式”。 調(diào)停者模式的定義是:用一個(gè)調(diào)停對(duì)象來封裝一系列的對(duì)象交互。調(diào)停者使各對(duì)象不需要顯 式地相互引用,從而使其耦合松散,而且可以獨(dú)立地改變它們之間的交互。簡(jiǎn)單點(diǎn)來說,將 原來兩個(gè)直接引用或者依賴的對(duì)象拆開,在中間加入一個(gè)“調(diào)?!睂?duì)象,使得兩頭的對(duì)象分 別和“調(diào)?!睂?duì)象引用或者依賴。兩者的差異:從目的上看,調(diào)停者模式與門面模式有些相似。但是門面模式是介于客戶程序與子系統(tǒng)之間的,而調(diào)停者模式是介于子系統(tǒng)與子系統(tǒng)之間的。這也注定了它們有很 大的區(qū)別:門面模式是將原有
9、的復(fù)雜邏輯提取到一個(gè)統(tǒng)一的接口,簡(jiǎn)化客戶對(duì)邏輯的使用。 它是被客戶所感知的,而原有的復(fù)雜邏輯則被隱藏了起來。而調(diào)停者模式的加入并沒有改變 客戶原有的使用習(xí)慣,它是隱藏在原有邏輯后面的,使得代碼邏輯更加清晰可用。8 .簡(jiǎn)述觀察者模式的基本思想,如何實(shí)現(xiàn)當(dāng)目標(biāo)對(duì)象發(fā)生變化時(shí)多個(gè)觀察者對(duì)象的同步 更新?畫出他們之間的協(xié)作圖。(1) Observer (觀察者)基本思想:對(duì)象間的一種一對(duì)多的依賴關(guān)系。當(dāng)一個(gè)對(duì)象的狀 態(tài)發(fā)生變化時(shí),所有依賴于它的對(duì)象都得到通知并自動(dòng)更新。(2)協(xié)作:當(dāng)Concrete Subject發(fā)生任何可能導(dǎo)到其參觀者與其本身狀態(tài)不一致的改 變時(shí),它將通知它的各個(gè)觀察者。在得到一個(gè)
10、具體的目標(biāo)改變通知后,Concrete Object 對(duì)象可向目標(biāo)對(duì)象查詢信息,Concrete Object使用這個(gè)些信息以使它的狀態(tài)與目標(biāo)對(duì)象的狀態(tài)一致。(3)協(xié)作圖:13加作圖-9 .舉一適合使用State模式的例子。與不使用該模式相比,有哪些優(yōu)點(diǎn)?舉例:抽象狀態(tài)類定義了一個(gè)抽象方法“寫程序”與不使用該模式相比優(yōu)點(diǎn):State模式將特定的狀態(tài)相關(guān)的行為封裝在一個(gè)類中,由于所有狀態(tài)相關(guān)的代碼都存在于某 個(gè)concrete state 中,所以通過定義新的子類可以很容易的增加新的狀態(tài)和轉(zhuǎn)換。10 .有哪些模式的使用可以使得類的復(fù)用性增強(qiáng)?說明你的理由。策略模式(strategy )屬于對(duì)象行
11、為型模式,主要定義一系列的算法,把這些算法一個(gè)個(gè)封裝成擁有共同接口的單獨(dú)的類,并使他們之間互換,客戶端調(diào)用他們的時(shí)候互不影 響。算法使用和算法分離,即將變化的具體算法封裝起來,降低了代碼的耦合度,算法提取起來,使算法得到重用。中介者模式( mediator ) 用一個(gè)調(diào)停對(duì)象來封裝一系列的對(duì)象交互。調(diào)停者使各對(duì)象不需要顯式地相互引用,從而使其耦合松散,而且可以獨(dú)立地改變它們之間的交互。即,將原來的兩個(gè)直接引用或者依賴的對(duì)象拆開,在中間加入一個(gè)“調(diào)?!睂?duì)象,使得兩頭的對(duì)象分別和“調(diào)?!睂?duì)象引用或者依賴。提高了原有系統(tǒng)的可讀性,將原有系統(tǒng)的多對(duì)多轉(zhuǎn)化為一對(duì)多,提高了代碼的可復(fù)用性。適配器 ( Ad
12、apter ) 模式 是的原本由于接口不兼容而不能再一起的那些類可以一起工作。如畫圖程序中,已實(shí)現(xiàn)繪制點(diǎn),直線等功能。為了讓客戶程序在使用的時(shí)候不用關(guān)心不同定義,定義個(gè)抽象類規(guī)范接口,當(dāng)去實(shí)現(xiàn)繪圖時(shí),發(fā)現(xiàn)系統(tǒng)其它地方已有制圖實(shí)現(xiàn),但是系統(tǒng)已有的方法與抽象類中規(guī)定方法不一樣,這時(shí)候用適配器模式可以解決這問題。適配器模式是為了面向接口編程中更好的復(fù)用。11 . 比較 Adapter 和 Proxy 模式使用上的異同之處。適配器模式(Adapter) : 將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。 Adapter 模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。代理模式有兩個(gè)英文名字
13、: Proxy Pattern 和 Surrogate Pattern 。代理模式:為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問。說白了就是,在一些情況下客戶不想或者不能直接引用一個(gè)對(duì)象,而代理對(duì)象可以在客戶和目標(biāo)對(duì)象之間起到中介作用,去掉客戶不能看到的內(nèi)容和服務(wù)或者增添客戶需要的額外服務(wù)。兩者的 主要區(qū)別 在于代理模式應(yīng)用的情況是不改變接口命名的,而且是對(duì)已有接口功能的一種控制;而適配器模式則強(qiáng)調(diào)接口轉(zhuǎn)換。12 . 說明 Observer 模式的基本實(shí)現(xiàn)方式。如果不用該模式,要達(dá)到同樣的效果,你會(huì)如何做?觀察者模式 在關(guān)于目標(biāo)角色、觀察者角色通信的具體實(shí)現(xiàn)中,有兩個(gè)版本。一種情況便是目標(biāo)角色
14、在發(fā)生變化后,僅僅告訴觀察者角色“我變化了” ;觀察者角色如 果想要知道具體的變化細(xì)節(jié),則就要自己從目標(biāo)角色的接口中得到。這種模式被很形象的稱為:拉模式就是說變化的信息是觀察者角色主動(dòng)從目標(biāo)角色中“拉”出來的。還有一種方法,那就是我目標(biāo)角色“服務(wù)一條龍” ,通知你發(fā)生變化的同時(shí),通過一個(gè)參數(shù)將變化的細(xì)節(jié)傳遞到觀察者角色中去。這就是“推模式”管你要不要,先給你啦。這兩種模式的使用,取決于系統(tǒng)設(shè)計(jì)時(shí)的需要。如果目標(biāo)角色比較復(fù)雜,并且觀察者角色進(jìn)行更新時(shí)必須得到一些具體變化的信息,則“推模式”比較合適。如果目標(biāo)角色比較簡(jiǎn)單,則“拉模式”就很合適。如果不使用該模式,可采用策略模式,將不同的情況作為子類
15、封裝在一個(gè)類中 , 模擬observer 模式中目標(biāo)角色的不同狀態(tài), 當(dāng)外部狀態(tài)發(fā)生變化時(shí), 可以選擇不同的 strategy1 、 strategy2改變觀察者角色,從而達(dá)到與觀察者模式同樣的效果。13 . 請(qǐng)列舉一個(gè)使用裝飾模式的例子。畫出你的例子的類圖結(jié)構(gòu)。JUnit 中的裝飾模式:在JUnit 中, TestCase 是一個(gè)很重要的類,允許對(duì)其進(jìn)行功能擴(kuò)展。 在 junit.extensions 包中, TestDecorator 、 RepeatedTest 便是對(duì) TestCase 的裝 飾模式擴(kuò)展。下面我們將它們和上面的角色對(duì)號(hào)入座。ARcpcatcdTcs14 .列舉兩個(gè)可以使
16、我們?cè)诔绦蛑胁槐厥褂胕felse結(jié)構(gòu)的軟件設(shè)計(jì)模式。使用軟件設(shè)計(jì)模式是如何做到這一點(diǎn)的?策略模式(strategy )和狀態(tài)模式(state )策略模式是將不同算法(處理方法)封裝到 stategy類中,狀態(tài)模式是將不同狀態(tài)封裝 到state類中。二者都是通過,類中的子類,實(shí)現(xiàn)不同情況的調(diào)用,從而有效的替換充滿在 程序中的if else 語句。15 .你認(rèn)為在Linux平臺(tái)上直接運(yùn)行 WIN32程序有可能嗎?如認(rèn)為不可能請(qǐng)說明理由; 如認(rèn)為可能應(yīng)如何實(shí)現(xiàn)這一目標(biāo)?(1)兩個(gè)OS內(nèi)部實(shí)現(xiàn)有很大差別,甚至連路徑的分隔符都不一樣,一個(gè)WIN3刎序無論如何到了最后也要調(diào)用 Window api ,而這
17、些api在linux上根本沒有實(shí)現(xiàn)(2)例如:就 用戶界面來說,有些 windows的控件,在Linux上根本連對(duì)應(yīng)的具有類似功能的控件都沒有 怎么執(zhí)行?如果再涉及進(jìn)程,線程就更復(fù)雜了,差距也更大,如果想用一個(gè)win32程序在linux 上執(zhí)行,必須有一個(gè)間接層來緩和二者差距,然后要求WIN3刎序只能調(diào)用這個(gè)間接層里面的庫函數(shù)16 . Java是一個(gè)跨平臺(tái)的軟件語言。為了實(shí)現(xiàn)跨平臺(tái),你認(rèn)為采用哪種軟件模式來實(shí)現(xiàn) 跨平臺(tái)部分更合理?說明你的理由。答:abstract factory實(shí)現(xiàn)跨平臺(tái)比較合適。用 abstract factory提供一個(gè)高層接口,來建造每個(gè)所需的Product ,當(dāng)然具體的實(shí)現(xiàn)要用 Concrete factory來實(shí)現(xiàn),然后讓每個(gè)os 對(duì)應(yīng)一個(gè)Concrete factory ,這樣當(dāng)其它
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 蛋類產(chǎn)品的市場(chǎng)推廣與品牌形象塑造考核試卷
- 橡膠合成過程中的質(zhì)量控制關(guān)鍵點(diǎn)考核試卷
- 航空旅游產(chǎn)品設(shè)計(jì)與創(chuàng)新考核試卷
- 木質(zhì)纖維素在環(huán)保型涂料中的應(yīng)用考核試卷
- 染整廢水處理設(shè)施的設(shè)計(jì)與選型考核試卷
- 計(jì)量檢測(cè)在珠寶鑒定的應(yīng)用考核試卷
- 西藥批發(fā)企業(yè)人才培養(yǎng)與激勵(lì)制度實(shí)施與改進(jìn)與監(jiān)督考核試卷
- 鹽的跨境電商機(jī)遇考核試卷
- 互聯(lián)網(wǎng)時(shí)代夫妻忠誠度維護(hù)與電子設(shè)備使用管理合同
- 民族文化傳承與創(chuàng)意設(shè)計(jì)工作室普通合伙經(jīng)營協(xié)議
- 2025年江蘇省鳳凰出版?zhèn)髅郊瘓F(tuán)招聘筆試參考題庫含答案解析
- 2024軟件開發(fā)與升級(jí)維護(hù)合同
- DB33 1050-2016 城市建筑工程日照分析技術(shù)規(guī)程
- 2024城市軌道交通牽引系統(tǒng)及其供電網(wǎng)直流偏磁電流同步監(jiān)測(cè)技術(shù)導(dǎo)則
- 2025版國家開放大學(xué)法律事務(wù)??啤睹穹▽W(xué)(1)》期末考試總題庫
- 應(yīng)用寫作-終結(jié)性考核-國開(SC)-參考資料
- 中國光纖陀螺新行業(yè)市場(chǎng)規(guī)模及投資前景預(yù)測(cè)分析報(bào)告
- 建行個(gè)人經(jīng)營性貸款合同
- 中國游戲發(fā)展史課件
- 史記人物課件教學(xué)課件
- 一站到底課件
評(píng)論
0/150
提交評(píng)論