設計模式 學習總結

2021-10-10 14:26:46 字數 4177 閱讀 6962

設計模式是解決問題的方案,學習現有的設計模式可以做到經驗復用。擁有設計模式詞彙,在溝通時就能用更少的詞彙來討論,並且不需要了解底層細節。

確保乙個類只有乙個例項,並提供該例項的全域性訪問點。

實現

使用乙個私有建構函式、乙個私有靜態變數以及乙個公有靜態函式

//1、懶漢式-執行緒不安全

public

class

singleton

public

static singleton getuniqueinstance()

return uniqueinstance;}}

//2、懶漢式-執行緒安全

public

static

synchronized singleton getuniqueinstance()

return uniqueinstance;

}//3、餓漢式-執行緒安全(一般情況下建議使用)

private

static singleton uniqueinstance =

newsingleton()

;//4、雙檢鎖/雙重校驗鎖-執行緒安全(dcl,即 double-checked locking)

public

class

singleton

public

static singleton getuniqueinstance()

}}return uniqueinstance;}}

//5、靜態內部類-執行緒安全

public

class

singleton

private

static

class

singletonholder

public

static singleton getuniqueinstance()

}//6、列舉

public

enum singleton

public

void

setobjname

(string objname)

在建立乙個物件時不向客戶暴露內部細節,並提供乙個建立物件的通用介面。

實現:

public

inte***ce

product

public

class

concreteproduct

implements

product

public

class

concreteproduct1

implements

product

public

class

concreteproduct2

implements

product

public

class

******factory

else

if(type ==2)

return

newconcreteproduct()

;}}public

class

client

}

定義了乙個建立物件的介面,但由子類決定要例項化哪個類。工廠方法把例項化操作推遲到子類。

public

abstract

class

factory

}public

class

concretefactory

extends

factory

}public

class

concretefactory1

extends

factory

}public

class

concretefactory2

extends

factory

}

提供乙個介面,用於建立相關的物件家族

public

class

abstractproducta

public

class

abstractproductb

public

class

producta1

extends

abstractproducta

public

class

producta2

extends

abstractproducta

public

class

productb1

extends

abstractproductb

public

class

productb2

extends

abstractproductb

public

abstract

class

abstractfactory

public

class

concretefactory1

extends

abstractfactory

abstractproductb createproductb()

}public

class

concretefactory2

extends

abstractfactory

abstractproductb createproductb()

}public

class

client

}

封裝乙個物件的構造過程,並允許按步驟構造。

public

class

abstractstringbuilder

(char c)

private

void

ensurecapacityinternal

(int minimumcapacity)

void

expandcapacity

(int minimumcapacity)

value = arrays.

copyof

(value, newcapacity);}

}

public

class

stringbuilder

extends

abstractstringbuilder

@override

public string tostring()

}

public

class

client

system.out.

println

(sb.

tostring()

);}//abcdefghijklmnopqrstuvwxyz

}

使用原型例項指定要建立物件的型別,通過複製這個原型來建立新物件。

public

abstract

class

prototype

public

class

concreteprototype

extends

prototype

@override

prototype myclone()

@override

public string tostring()

}

public

class

client

//abc

}

設計模式學習總結

之前一直是面向過程程式設計,前段時間因為某些原因需要更好的去理解一下物件導向思想精髓,在別人的推薦下看了 大話設計模式 這本書。通過對29個模式的學習,不僅僅了解了設計模式是個什麼回事,也稍微加深了一點對物件導向 object oriented 技術。物件導向技術關注的是物件,物件的優點在於,可以定...

設計模式學習總結

乙個月帶著讀看完了設計模式,其中有一些模式真的是被坑著了,比如composite組合模式如果不用葉節點,真說不出有什麼特性。再比如備忘錄模式,我覺得這個模式的核心是打包傳遞資料,而不是用來備忘。好了,先寫乙個總結,以後慢慢消化 每個模式如果細說肯定不是三言兩語可以概括的,但是需要簡略概括,才能快速理...

設計模式學習總結

這兩天在看broadview的.net與設計模式一書。發現這本書的觀點很有道理,雖然今天剛把singtelon模式做了乙個總結,但是從學習設計模式的路上往回倒一步,先寫乙個學習設計模式應該注意的地方。我覺得要注意的主要有以下幾點 1.不要把設計模式當作解決方案,儘管gof的設計模式中更加偏重於解決方...