理解松耦合設計思想
掌握物件導向設計原則
掌握重構技法改善設計
掌握gof 核心設計模式
「每乙個模式描述了乙個在我們周圍不斷重**生的問題,
以及該問題的解決方案的核心。這樣,你就能一次又一次
地使用該方案而不必做重複勞動」。
——christopher alexander
底層思維:向下,如何把握機器底層從微觀理解物件構造
• 語言構造
• 編譯轉換
• 記憶體模型
• 執行時機制
抽象思維:向上,如何將我們的周圍世界抽象為程式**
• 物件導向
• 元件封裝
• 設計模式
• 架構模式
向下:深入理解三大物件導向機制
• 封裝,隱藏內部實現
• 繼承,復用現有**
• 多型,改寫物件行為
向上:深刻把握物件導向機制所帶來的抽象意義,理解如何使用
這些機制來表達現實世界,掌握什麼是「好的物件導向設計」
• 客戶需求的變化
• 技術平台的變化
• 開發團隊的變化
• 市場環境的變化
……分解
• 人們面對複雜性有乙個常見的做法:即分而治之,將大問題分解為多個小問題,將複雜問題分解為多個簡單問題。
偽**01:
例如,我們來做乙個畫圖的程式:
/*shape1.h*/
class
point
;class
line};
class
rect};
//1-增加
class
circle
;
/*mainform1.cpp*/
class
mainform
:public form
protected
:virtual
void
onmousedown
(const mouseeventargs& e)
;virtual
void
onmouseup
(const mouseeventargs& e)
;virtual
void
onpaint
(const painteventargs& e);}
;void mainform::
onmousedown
(const mouseeventargs& e)
void mainform::
onmouseup
(const mouseeventargs& e)
else
if(rdorect.checked)
//3-改變
elseif(
...)
//...
this
->
refresh()
; form::
onmouseup
(e);
}```cpp
void mainform::
onpaint
(const painteventargs& e)
//針對矩形
for(
int i =
0; i < rectvector.
size()
; i++
)//4-改變
//針對圓形
for(
int i =
0; i < circlevector.
size()
; i++
)//...
form::
onpaint
(e);
}
如上程式:
我們是分而治之,將直線,矩形分開來畫,自己有自己的畫法,自己有自己的介面。假如我們增加乙個能畫圓的功能。此時我們需要在源**中要加入很多東西,如上**。這樣看著是實現了這個功能,但是改的很繁瑣。**性基本沒有什麼復用性。
抽象• 更高層次來講,人們處理複雜性有乙個通用的技術,即抽象。由於不能掌握全部的複雜物件,我們選擇忽視它的非本質細節,而去處理泛化和理想化了的物件模型。
偽**02
/*shape2.h*/
class
shape
//這塊析構寫成虛的,在之後子類的物件在析構時,才能呼叫自身的析構};
class
point
;class
line
:public shape
//實現自己的draw,負責畫自己
virtual
void
draw
(const graphics& g)};
class
rect
:public shape
//實現自己的draw,負責畫自己
virtual
void
draw
(const graphics& g)};
//增加
class
circle
:public shape
};
/*mainform2.cpp*/
class
mainform
:public form
protected
:virtual
void
onmousedown
(const mouseeventargs& e)
;virtual
void
onmouseup
(const mouseeventargs& e)
;virtual
void
onpaint
(const painteventargs& e);}
;void mainform::
onmousedown
(const mouseeventargs& e)
void mainform::
onmouseup
(const mouseeventargs& e)
else
if(rdorect.checked)
//改變 其實之後如果用到工廠模式,這塊也不用改變。
elseif(
...)
//...
this
->
refresh()
; form::
onmouseup
(e);
}void mainform::
onpaint
(const painteventargs& e)
//...
form::
onpaint
(e);
}
對於**二,我們運用乙個抽象類shape。對外乙個shape介面,然後用虛方法實現,針對所有的圖形,多型呼叫,各負其責。如果要新添畫其他圖的功能,我們需要增加的東西很少。具有**復用性。
注:從這小例子也能看出多型,抽象類的重要性。
設計模式 01單例設計模式
所謂類的單例設計模式,就是採取一定的方法保證在整個軟體系統中,對某個類只能存在乙個物件例項,並且該類只提供乙個取得其物件例項的方法 靜態方法 比如hibernate中的sessionfactory,它充當的就是資料儲存源的 並負責建立session物件。sessionfactory並不是輕量級的,一...
設計模式01 原因
第一,雖然網上有很多教程,但大都不得要領,導致設計模式看起來非常複雜,就個人而言,從畢業到現在,反覆學習過不下10遍,但由於工作中使用場景有限,不久就又忘記了。所以計畫整理出乙個適合個人的學習or複習的教程。第二,設計模式,本來是漸進的演化,或者基於需求驅動的,而非靜態的結構 也就是說應該是原有結構...
01 設計模式 單例模式
package com.hxh public class hungry public static hungry getinstance public static void main string args start 注意事項 變數hungry必須是 私有,靜態,不可變 構造器私有 公開的get...