原创 13.Facade Pattern 門面模式

門面模式其實不是一種代碼模式,而是一種設計思想,設計原則,根據這種思想設計出來的程序,模塊與模塊之間具有松耦合性。門面模式是連接兩個對象之間的中介,兩個對象的交流都通過這個中介傳遞。 其實廣義上的門面模式有很多體現,如原始的計算機不存在軟

原创 23.Interpreter Pattern 解析器模式

在特定領域中,某些變化雖然頻繁,但可以抽象爲某種規則。這種時候,結合特定領域,將問題抽象爲語法規則,從而給出在該領域下的一般性解決方案。 動機:在軟件構建過程中,如果某一特定領域的問題比較複雜,類似的結構不斷重複出現,如果使用普通的編程方

原创 14. proxy pattern 代理模式

適用情境:某些對象由於性能原因、安全控制原因、分佈式原因等不是很容易獲得它的對象。 定義:代理模式通過增加一層間接層,間接地控制對象,對外部使用者來說,一般沒有任何區別,但是Proxy類的同名方法中卻要做很多事情來解決性能、安全控制或是分

原创 21.Command Pattern 命令模式

動機:將組件的行爲與組件本身解耦。其實一個類相當於一個組件,而其中的方法相當於行爲,兩者的耦合程度是非常緊密的。爲了將兩者解耦,則將每個行爲定義成一個類,也就是一個類中只有一個方法,這個方法表示一個行爲或是一個步驟。當某個流程需要多個步驟

原创 20. Chain of Resposibility 職責鏈模式

動機:在軟件構建過程中,一個請求可能被多個對象處理,但是每個請求在運行時只能有一個接受者,如果顯示指定,將必不可少地帶來請求發送者與接受者的緊耦合。 如何使請求的發送者不需要指定具體的接受者,讓請求的接受者自己在運行時決定來處理請求從而是

原创 22. Visitor Pattern 訪問器模式

動機:在軟件構建過程中,由於需求的變化,某些類層次結構(父類、子類)中添加新的行爲。如果直接在基類中更改,將會給子類帶來很繁重的變更負擔,甚至破壞原有設計。如何在不更改原有類的情況下,透明地爲類層次結構添加新行爲。 定義:表示一個作用於某

原创 雜記 CSS佈局

1. 側邊欄的高度自適應,如圖: 右邊的其他方式登錄的白色豎條div要根據下面的內容自適應高度。這個頁面總的佈局是: <div class="head"></div> <div class="body">     <div class=

原创 15. Mediator Pattern 中介者模式

要解決的問題:當一個程序中的多個對象之間要互相訪問數據,就會產生非常緊密的耦合關係。 解決方法:在這些對象之間設計一箇中介者,將所有的數據都存儲於這個終結類中,那麼讀寫都從中介類中讀寫。 其實這個與門面模式很像,但是門面模式是解決兩個對象

原创 19. Iterator Pattern 迭代器模式

動機:在軟件構建過程中,集合對象內部結構常常變化各異,但對於這些集合對象,我們希望在不暴露其內部結構的同時,可以讓外部客戶代碼透明地訪問其中包含的元素,同時這種“透明遍歷”也爲“同一種算法在多種集合對象上進行操作”提供了可能。 使用面向對

原创 18. Composite Pattern 組合模式

使用List與多態將對象組合成樹形結構,Composite使得用戶對單個對象和組合對象的使用具有一致性。 List中的對象可能是中間結點也可能是葉子結點,而中間結點中也包含一個List,它們都繼承自同一基類。這就是樹形結構。 不管是中間結

原创 16. State Pattern 狀態模式

在軟件構建過程中,對象狀態的改變,其行爲也會發生改變。在不同的狀態下,進行相同的操作,會有不同的響應,這種對於不同的狀態進行不同的響應就會有很多if else來判斷當前的狀態。這和策略模式面臨的問題很像。當有新的狀態出現時,就要在後面再加

原创 24.設計模式總結

目標:管理變化、提高複用 手段:分解(知道類之間的不同)、抽象(知道類之間的共同點) 八大原則:參考第一篇 重構技法:靜態->動態 早綁定->晚綁定 繼承->組合 編譯時依賴->運行時依賴 緊耦合->松耦合 組合優於繼承,是指組合對象指針

原创 17. Memento Pattern 備忘錄

要解決的問題:在軟件構建過程中,某些對象的狀態在轉換過程中,可能由於某種需要,要求程序能夠回溯到對象之前處於某個點時的狀態,比如PS的撤回功能,還有之前寫聯棋的悔棋功能。如果使用共有接口來讓其他對象得到對象的狀態,便會暴露對象的實現細節。

原创 Unity中的渲染優化

造成Unity渲染瓶頸的原因可能是 CPU(物理模擬、過多的drawcall) GPU(過多的頂點計算(頂點多、逐頂點光源多)、過多的片元計算(分辨率大、多次overdraw(半透明、屏幕後處理、渲染順序))、實時渲染) 內存(尺寸大且未

原创 重構API

1. 將查詢函數與修改函數分離 因爲查詢是沒有副作用的,但是修改函數卻有可能有副作用。這個也可以引申爲將查詢函數與響應函數分離。就是在查詢函數中將所有可能造成副作用的語句提煉成一個函數。這樣需要關心的代碼就更少了。 2. 函數參數化 如果