先從最常見的單例模式開始寫起
**簡潔而且執行緒安全,但是缺點是即使不呼叫getinstance()方法ins也會被初始化,造成一定的資源浪費
public
class
singleton
public
static singleton getinstance()
}
為了避免餓漢式的浪費,可按照如下實現
public
class
singleton
public
static singleton getinstance()
return ins;
}}
雖然解決了資源浪費的問題,但是在多執行緒環境下,上面的**是不安全的。要想在多執行緒環境下使用懶漢式可以有如下方式:
這個不多說了,直接用synchronized修飾方法,安全但是低效
public
class
singleton
public
static
synchronized singleton getinstance()
return ins;
}}
public
class
singleton
public
static
synchronized singleton getinstance() }}
return ins;
}}
比起雙檢鎖更優雅的一種實現方式,使用類載入機制(只有在用到某一類時才會載入)保證延遲載入效果,同時類載入器又保證了執行緒安全
public
class
singleton
public
static
synchronized singleton getinstance()
private
static
class
singletonins
}
通過列舉也可以實現執行緒安全的單例模式,但是只有jdk 1.5以後才可以使用
public
enum singleton
登記式實際對一組單例模式進行的維護,具體實現是當要獲取例項時先讀取map中是否存在該例項,若存在則返回,否則建立例項,存入map並返回該例項。不是很難就不上**了,嘿嘿。。。
jdk中的runtime,典型的餓漢式
public
class
runtime
private
runtime() {}
...}
每日一記 設計模式 工廠模式
工廠模式屬於建立型模式,是非常常見的設計模式 工廠模式可分為簡單工廠 工廠方法 抽象工廠 簡單工廠由乙個工廠類根據傳入的參量決定建立出哪一種產品類的例項,雖然降低了客戶端對於產品類的依賴,但是所有的邏輯都集中在工廠類中,每當要增加一種新產品時就要修改工廠類的 違反了 開閉原則 擴充套件性不強。產品 ...
每日一記 設計模式 狀態模式
狀態介面 public inte ce state class concretestatea implements state override public void handle string param class concretestateb implements state overrid...
每日一記 設計模式 訪問者模式
商品介面 public inte ce goods class basketball implements goods public intgetprice override public intaccept visitor visitor class fruit implements goods ...