設計模式 01 設計模式綱要

2021-10-04 02:21:37 字數 3568 閱讀 6249

理解松耦合設計思想

掌握物件導向設計原則

掌握重構技法改善設計

掌握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...