Java面試時常用設計模式的用途

Java面試時常用設計模式的用途

一、Adapter模式

	在軟件版本升級的時候,以前版本的軟件已經通過測試了,爲了兼容老的版本,這時用Adapter
模式,可以輕鬆地同時維護新版本和老版本。實現方式:讓新版本扮演Adaptee(被適配)角色,舊版
本扮演Target角色,接着編寫一個扮演,Adapter角色的類,讓它使用新版本的類來實現舊版本的類中
的方法。

二、Builder模式

	Builder類的方法來編寫文檔,但是它並不知道它"真正"使用的哪個類。 正是因爲不知道才
能替換,正是因爲可以替換,組件才具有高價值。作爲設計人員,我們必須時刻關注這種"可替換性"。

三、Chain模式

	Chain of Responsibility模式的最大優點就在於弱化了發出請求的人(Client角色)和處理請
求的人(ConcreteHandler角色)之間的關係Client角色向第一個ConcreteHandler角色發出請
求,然後請求會在職責鏈中傳播,直到某個ConcreteHandler角色處理該請求,使用Chain of 
Responsibility模式,通過委託推卸責任,就可以根據情況變化動態地重組職責鏈。
	 如果固定寫明"某個請求需要誰處理"這樣的對應關係,那麼很難在程序運行中去改變請求的處理者。
	 例如:在視窗系統中,用戶有時需要可以自由地在視窗中添加控件
	 缺點:如果職責鏈太長,會導致處理請求發生了延遲

四、Composite模式

	使用Composite模式可以使容器與內容具有一致性,也可以稱其爲多個和單個的一致性,即將多
個對象結合在一起,當作一個對象進行處理,遞歸結構那種,Entry類中定義了add方法,
所做的處理是拋出異常,這是因爲能使用add方法的只能是Directory類。

五、Decorator模式

Decorator模式的主要目的是通過添加裝飾物來增加對象的功能
	 用Decorator模式可以爲程序添加許多功能。只要準備一些裝飾邊框(ConcreteDecorator角色),
	 即使這些裝飾邊框都只具有非常簡單的功能,也可以將它們自由組合成爲新的對象
	 java.io包與Decorator模式
	 Reader reader = new FileReader("datafile.txt");  ---讀取文件
	 Reader reader = new BufferedReader(new FileReader("datafile.txt"));  ---讀取文件時將文件內容放入緩衝區
	 Reader reader = new LineNumberReader(new BufferedReader(new FileReader("datafile.txt")));  ---管理行號
	 缺點:Decorator模式的一個缺點是會導致程序中增加許多功能類似的很小的類

六、Facade模式

在大型系統中,類和方法很多,對於不是很熟悉業務的人來說,調用這些方法和類時就很麻煩。
	 不知道先使用哪個,後使用哪個,這時使用Facade模式就變得很有必要了。
	 從例子中看出:先從數據庫中獲取需要讀取的配置文件,然後拿到用戶名,然後html輸出,
	 將這些步驟放到一個makeWelcomePage方法中,這樣接口變少了,使用者也不用
	 擔心這些方法和類的調用順序和它們放在哪了。
	 在超大系統中,往往都含有非常多的類和包。如果我們在每個關鍵的地方都使用Facade模式,
	 那麼系統的維護就會變得輕鬆很多

七、Factory模式

Factory模式:生成實例的工廠
	 父類決定市領導生成方式,但並不決定所要生成的具體的類,具體的處理全部交給子類負責,
	 這樣就可以將生成實例的框架和實際負責生成實例的類解耦
	 使用設計模式設計類時,必須要向維護這些類的開發人員正確地傳達設計這些設計模式的意圖,
	 否則,維護人員在修改設計時可能會違背設計者最初的意圖。

八、Flyweight模式

共享實例可減少內存使用,內存是資源的一種。時間也是一種資源,使用new關鍵字生成實例會花費時間。
	 通過Flyweight模式共享實例可以減少使用new關鍵字生成實例的次數。
	 這樣就可以提高程序運行速度。

九、Iterator模式

1、爲什麼要引入Iterator模式,而不是直接用for循環遍歷?
	 這樣做主要是爲了將遍歷與實現分離開來,不管以後BookShelf後期放棄數組來管理書,都不
會影響到遍歷,對於BookShelf的調用者來說真的太方便了。
2、設計模式的作用?
	 設計模式的作用就是幫助我們編寫可複用的類,所謂"可複用",就是指將類實現爲"組件",當一
個組件發生改變時,不需要對其他的組件進行修改或是只需要很小的修改即可應對。
	 3、爲什麼要用抽象類和接口
	 	如果只使用具體的類來解決問題,很容易導致類之間的強耦合,這些類也難以作爲組件被再
次利用。爲了弱化類之間的耦合,進而使得類更加容易作爲組件被再次利用,我們需要引入抽象類和接口

十、Mediator模式

主要是將需要集中處理的業務邏輯放到LoginFrame中,哪怕其中的某個需求改變了,並不會影響其它組件的使用。
	 面向對象編程可以幫助我們分散處理,避免處理過於集中。但是將一些業務處理分散在各個類中,
	 需求修改時不利於組件的複用。該分散時分散,該集中是集中。

十一、Memento模式

主要是用來保存實例的狀態,在下次需要的時候進行復制。達到撤銷,重做,歷史記錄,快照的效果

十二、observer模式

具體的觀察者註冊到subject,通過調用subject的execute方法,通知到觀察者,執行每個觀察者的方法

十三、Proxy模式

代理人只代理他能解決的問題。當遇到他不能解決的問題時,還是會"轉交"給本人去解決。

十四、Singleton模式

將構造器私有化,將對象的創建作爲成員變量私有化,提供靜態方法出來獲取對象

十五、State模式

在編程時,我們經常會使用分而治之的方針。它非常適用於大規模的複雜處理。當遇到龐大且複雜的
問題,不能用一般的方法解決時,我們會先將該問題分解爲多個小問題。
	 分而治之:將一個複雜的大問題分解爲多個小問題然後逐個解決

十六、Strategy模式

通常在編程時算法會被寫在具體方法中。Strategy模式卻特意將算法與其他部分分離開來,
	 只是定義了與算法相關的接口,然後在程序中以委託的方式來使用算法。
	 當我們想要通過改善算法來提高算法的處理速度時,如果使用了Strategy模式,就不必修改
	 Strategy角色的接口,僅僅修改ConcreteStrategy角色即可。使用委託這種弱關聯關係可
	 以很方便的整體替換算法。

十七、Template Method模式

Template Method模式的優點:在父類的模板方法中編寫了算法,因此無需在每個子類中再編寫算法。
	 如果在使用Template Method模式進行編程,當我們在模板方法中發現Bug時,只需要修改模
	 板方法即可解決問題。
類類對子類的要求:
	 1、在子類中可以使用父類中定義的方法
	 2、可以通過在子類中增加方法以實現新的功能
	 3、在子類中重寫父類的方法可以改變程序的行爲
聲明抽象方法的目的:
	 1、期待子類去實現抽象方法
	 2、要求子類去實現抽象方法

十八、Visitor模式

Visitor模式的目的是將處理從數據結構中分離出來。
	 數據結構可以將元素集合和數據關聯在一起。保存數據結構與以數據結構爲基礎進行處理是兩
	 種不同的東西。
	 開閉原則:對擴展開放,對修改關閉
	 在不修改現有代碼的前提下進行擴展功能就是開閉原則
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章