




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1.簡述“開閉”原則的基本思想。請舉出一個使用了軟件“開閉”原則的軟件設計模式,其中何處體現了“開閉”原則。答:“開閉”原則:軟件實體應當對擴展開放,而對修改關閉,“開-閉”原則要求軟件系統能夠在不需要修改原有類的基礎上,通過增加類達到擴展功能的目的。Abstract factory體現了這個原則,如果想增加一類新的products,只需在product類體系中增加各個products,然后在factory類體系結構中增加一個concrete factory就可以了,而不需要對現有類做任何修改,The Open-closed principleocp在不改動過模塊源代碼的情況下擴展模塊的行為。
2、軟件實體(類模塊 函數等)應該是可以擴展的,但是不可以修改的。2.簡述依賴例轉原則的基本思想。請舉出一個使用了軟件依賴原則的軟件設計模式,其中何處體現了依賴原則。答:依賴倒置原則的基本思想是:高層模塊不應該依賴于低層模塊,二者都應該依賴于抽象。抽象不應該依賴于細節,細節應該不依賴于抽象。Tomplate method就體現了這個原則,它定義了一個操作中的算法骨架,而將一些步驟延遲到子類中,template method使得子類不改變一個算法的結構,即可重定義該算法的某些特定步驟。 3.什么是單一職責原則?請舉出一個使用了單一職責原則的軟件設計模式,其中何處體現了單一職責原則。答:基本思想:SR
3、P使得一個類或一個模塊承擔的責任盡可能的少,使盡可能少的因素或動機影響該類或該模塊,即增大類或模塊的內聚性,減少其耦合度,SRP是所有原則中最簡單的之一,也是最難正確運用的之一。COMMAND模式體現了SRP原則,大多數類都是一組方法和相應的一組變量的結合,而該模式只是封裝了一個沒有任何變量的函數,它對函數的關注超過了類,將一個請求封裝為一個對象,從而可用不同的請求對客戶進行參數化。4.軟件復用可采用類的繼承方式和類的聚合方式,比較兩者的優缺點。答:聚合:一個對象擁有另一個對象或對另一個對象負責(即一個對象包含另一個對象或是另一個對象的一部分)并且聚合對象和其所有具有相同的生命周期(即所謂的“
4、同生共死”關系)。聚合復用優點:容器類僅能通過被包含對象的接口來對其進行訪問。“黑盒”復用,因為被包含對象的內部細節對外是不可見。包裝性好。實現上的相互依賴性比較小。每一個類只專注于一項任務。通過獲取指定其他的具有相同類型的對象的使用,可以在運行期間動態地定義(對象的)組合。聚合的缺點:導致系統中的對象過多 為了能將多個不同的對象作為組合塊來使用,必須仔細地對接口進行定義。類繼承:是一種通過擴展(一個已有對象的)實現,從而獲得新功能的復用方法。繼承的優點:容易進行新的實現,因為其大多數可繼承而來 易于修改或擴展那些被復用的實現。繼承的缺點:破壞了封裝性,因為這會將父類的實現細節暴露給子類 “白
5、盒”復用,因為父類的內部細節對于子類而言通常是可見的 當父類的實現更改時,子類也不得不隨之更改 從父類繼承來的實現將不能在運行期間進行改變。5.畫出工廠方法模式的結構圖。什么情況下適合使用工廠方發模式?其中product:為工廠模式所要創建的對象類型定義一個接口。Concrete product:實現product接口。Creator:聲明工廠方法(factory method)返回值為product的一個對象。Concrete creator:覆寫factory Method(),返回值為concrete product 的一個具體實例。在下面情況下你可以考慮使用工廠方法模式: 1) 當客戶
6、程序不需要知道要使用對象的創建過程。 2) 客戶程序使用的對象存在變動的可能,或者根本就不知道使用哪一個具體的對象。6.畫出合成模式(Composite)的結構圖。舉例說明一個可以應用合成模式的軟件設計實例,說明其中各角色的作用。實例:計算機和立體組合音響這樣的設備經常被組裝成一部分整體層次結構或者是容器層次結構,例如:底盤可以包含驅動裝置和平面板,總線含有多個插件,機柜包括底盤、總線等。這樣結構很自然的用composite模式進行模擬。Equipment類為在部分整體層次結構中的所有設備定義一個接口。Equipment聲明一些操作返回一個設備的屬性,例如它的能是消耗和價格。子類為指定的設備實
7、現了這些操作,Equipment還聲明了一個Create Iterator 操作,該操作為訪問它的零件返回一個Iterator ,這個操作的缺省實現返回一上NullIterator,它在空集上迭代。Composite Equipment是包含其它設備的基類,它也是Equipment的子類。7.簡述門面模式(Facade)和中介者模式(Mediator)的基本思想,兩者的差異何在?答:門面模式(facade)又稱外觀模式。基本思想:為子系統中的一組接口提供一個一致的界面, Facade模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。“中介者模式”基本思想:Mediator Patte
8、rn 中文譯為“中介者模式”、“調停者模式”。調停者模式的定義是:用一個調停對象來封裝一系列的對象交互。調停者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。簡單點來說,將原來兩個直接引用或者依賴的對象拆開,在中間加入一個“調停”對象,使得兩頭的對象分別和“調停”對象引用或者依賴。兩者的差異: 從目的上看,調停者模式與門面模式有些相似。 但是門面模式是介于客戶程序與子系統之間的,而調停者模式是介于子系統與子系統之間的。這也注定了它們有很大的區別:門面模式是將原有的復雜邏輯提取到一個統一的接口,簡化客戶對邏輯的使用。它是被客戶所感知的,而原有的復雜邏輯則被隱藏了
9、起來。而調停者模式的加入并沒有改變客戶原有的使用習慣,它是隱藏在原有邏輯后面的,使得代碼邏輯更加清晰可用。8.簡述觀察者模式的基本思想,如何實現當目標對象發生變化時多個觀察者對象的同步更新?畫出他們之間的協作圖。(1)Observer(觀察者)基本思想:對象間的一種一對多的依賴關系。當一個對象的狀態發生變化時,所有依賴于它的對象都得到通知并自動更新。(2)協作:當Concrete Subject發生任何可能導到其參觀者與其本身狀態不一致的改變時,它將通知它的各個觀察者。在得到一個具體的目標改變通知后,Concrete Object對象可向目標對象查詢信息,Concrete Object使用這個
10、些信息以使它的狀態與目標對象的狀態一致。(3)協作圖:9.舉一適合使用State模式的例子。與不使用該模式相比,有哪些優點?舉例:抽象狀態類定義了一個抽象方法“寫程序”與不使用該模式相比優點:State模式將特定的狀態相關的行為封裝在一個類中,由于所有狀態相關的代碼都存在于某個concrete state中,所以通過定義新的子類可以很容易的增加新的狀態和轉換。10.有哪些模式的使用可以使得類的復用性增強?說明你的理由。策略模式(strategy) 屬于對象行為型模式,主要定義一系列的算法,把這些算法一個個封裝成擁有共同接口的單獨的類,并使他們之間互換,客戶端調用他們的時候互不影響。算法使用和算
11、法分離,即將變化的具體算法封裝起來,降低了代碼的耦合度,算法提取起來,使算法得到重用。中介者模式(mediator) 用一個調停對象來封裝一系列的對象交互。調停者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。即,將原來的兩個直接引用或者依賴的對象拆開,在中間加入一個“調停”對象,使得兩頭的對象分別和“調停”對象引用或者依賴。提高了原有系統的可讀性,將原有系統的多對多轉化為一對多,提高了代碼的可復用性。適配器(Adapter)模式 是的原本由于接口不兼容而不能再一起的那些類可以一起工作。如畫圖程序中,已實現繪制點,直線等功能。為了讓客戶程序在使用的時候不用關心
12、不同定義,定義個抽象類規范接口,當去實現繪圖時,發現系統其它地方已有制圖實現,但是系統已有的方法與抽象類中規定方法不一樣,這時候用適配器模式可以解決這問題。適配器模式是為了面向接口編程中更好的復用。11.比較Adapter和Proxy模式使用上的異同之處。適配器模式(Adapter):將一個類的接口轉換成客戶希望的另外一個接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。代理模式有兩個英文名字:Proxy Pattern 和 Surrogate Pattern。代理模式:為其他對象提供一種代理以控制對這個對象的訪問。說白了就是,在一些情況下客戶不想或者不能直接
13、引用一個對象,而代理對象可以在客戶和目標對象之間起到中介作用,去掉客戶不能看到的內容和服務或者增添客戶需要的額外服務。兩者的主要區別在于代理模式應用的情況是不改變接口命名的,而且是對已有接口功能的一種控制;而適配器模式則強調接口轉換。 12.說明Observer模式的基本實現方式。如果不用該模式,要達到同樣的效果,你會如何做?觀察者模式在關于目標角色、觀察者角色通信的具體實現中,有兩個版本。一種情況便是目標角色在發生變化后,僅僅告訴觀察者角色“我變化了”;觀察者角色如果想要知道具體的變化細節,則就要自己從目標角色的接口中得到。這種模式被很形象的稱為:拉模式就是說變化的信息是觀察者角色主動從目標
14、角色中“拉”出來的。 還有一種方法,那就是我目標角色“服務一條龍”,通知你發生變化的同時,通過一個參數將變化的細節傳遞到觀察者角色中去。這就是“推模式”管你要不要,先給你啦。 這兩種模式的使用,取決于系統設計時的需要。如果目標角色比較復雜,并且觀察者角色進行更新時必須得到一些具體變化的信息,則“推模式”比較合適。如果目標角色比較簡單,則“拉模式”就很合適。 如果不使用該模式,可采用策略模式,將不同的情況作為子類封裝在一個類中,模擬observer模式中目標角色的不同狀態,當外部狀態發生變化時,可以選擇不同的strategy1、strategy2改變觀察者角色,從而達到與觀察者模式同樣的效果。1
15、3.請列舉一個使用裝飾模式的例子。畫出你的例子的類圖結構。JUnit 中的裝飾模式:在 JUnit 中,TestCase 是一個很重要的類,允許對其進行功能擴展。 在 junit.extensions 包中,TestDecorator、RepeatedTest 便是對 TestCase 的裝飾模式擴展。下面我們將它們和上面的角色對號入座。14.列舉兩個可以使我們在程序中不必使用ifelse結構的軟件設計模式。使用軟件設計模式是如何做到這一點的?策略模式(strategy)和狀態模式(state)策略模式是將不同算法(處理方法)封裝到stategy類中,狀態模式是將不同狀態封裝到state類中。
16、二者都是通過,類中的子類,實現不同情況的調用,從而有效的替換充滿在程序中的 if else 語句。15.你認為在Linux平臺上直接運行WIN32程序有可能嗎?如認為不可能請說明理由;如認為可能應如何實現這一目標?(1)兩個OS內部實現有很大差別,甚至連路徑的分隔符都不一樣,一個WIN32程序無論如何到了最后也要調用Window api,而這些api在linux上根本沒有實現(2)例如:就用戶界面來說,有些windows的控件,在Linux上根本連對應的具有類似功能的控件都沒有怎么執行?如果再涉及進程,線程就更復雜了,差距也更大,如果想用一個win32程序在linux上執行,必須有一個間接層來緩和二者差距,然后要求WIN32程序只能調用這個間接層里面的庫函數16. Java是一個跨平臺的軟件語言。為了實現跨平臺,你認為采用哪種軟件模式來實現跨平臺部分更合理?說明你的理由。答:abstract factory實現跨平臺比較合適。用abstract factory提供一個高層接口,來建造每個所需的Product,當然具體的實現要用Concrete factory來實現,然后讓每個os對應一個Concrete factory,這樣當其它的J
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省東營市墾利區第一中學2025屆高三下學期第三次質檢考試歷史試題含解析
- 江蘇省徐州市泉山區2025年初三適應性監測考試物理試題含解析
- 上海市長寧區2024-2025學年高三年級4月摸底考試英語試題含解析
- 山東省煙臺市萊山區重點中學2024-2025學年初三年級第二次教學質量檢查考試數學試題含解析
- 江蘇省南通市安海中學2025年高三年級第二學期自主檢測試題(2)化學試題含解析
- 裝修電工施工合同范本
- 喀喇沁旗2025年三下數學期末復習檢測試題含解析
- 戰略規劃咨詢合同
- 甲乙丙三方設備購買租賃合同
- 統編版二年級語文下冊第八單元測試卷(B)(含答案)
- 東湖老陳醋營銷計劃書
- 腦出血急救和護理課件
- 2024年江蘇省泰州市國有企業招聘筆試參考題庫含答案解析
- 土的滲透性完整版本
- 強化業務運營管理優化業務流程的工作總結及計劃
- 2023災難現場脊柱和骨盆損傷評估與處理要求
- 對口支援鄉鎮衛生院工作醫師考核登記表
- 云縣生活垃圾填埋場沼氣污染治理及綜合利用項目環評報告
- 第十章 思想政治教育的方法和藝術
- 養殖場防疫管理制度(五篇)
- β內酰胺類抗菌藥物皮膚試驗指導原則(2021年版)解讀
評論
0/150
提交評論