設計模式是解決問題的方案,學習現有的設計模式可以做到經驗復用。擁有設計模式詞彙,在溝通時就能用更少的詞彙來討論,並且不需要了解底層細節。確保乙個類只有乙個例項,並提供該例項的全域性訪問點。
實現:
使用乙個私有建構函式、乙個私有靜態變數以及乙個公有靜態函式。
//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的設計模式中更加偏重於解決方...