Java設計模式 單例模式 觀察者模式 工廠模式

2021-09-01 02:44:47 字數 3363 閱讀 7292

概念:

全域性只有乙個例項,自行例項化物件,自行向整個系統提供這個例項。

應用場景:

優點:缺點:

餓漢式類載入的時候就開始載入,使用的是靜態變數,由jvm的classloader機制避免了執行緒安全問題,保證執行緒安全

缺點:一開始便載入占用記憶體,沒有達到懶載入效果,如果例項化是耗費資源的,則懶載入可以節省載入時耗費的資源。另外如果例項一直沒有使用會占用記憶體。

public class singleton

public static singleton getinstanceo()

}

餓漢式的另外方式

與正常的餓漢式並沒有太大的區別。

public class singleton

private singleton(){}

public static singleton getinstance()

}

懶漢式

延遲載入,在呼叫getinstance的時候才開始載入,無須一直占用系統資源。從資源利用率的角度來講優於餓漢式。

缺點:執行緒不安全,當執行緒a判斷了是空的時候進行建立物件,在建立物件前線程b進來判斷到是空,也建立了物件,因此執行緒a和執行緒b的物件不一致。

public class singleton 

public static singleton getinstance()

return single;

}}//優化---增加鎖機制 1 ,在方法上加

public synchronize singleton getinstance()

}//缺點:鎖住了整個類,這個類中的其他成員變數也需要等待釋放鎖後被其他執行緒使用,效率低下。

//優化,雙重鎖校驗,缺點:可能會出現等待時間,降低系統效能。

public static singleton getinstance()}}

return single;

}

靜態內部類

靜態內部類不是在一開始啟動的時候載入,而是第一次呼叫的使用載入,實現了懶載入,並且由jvm的classloader機制實現執行緒同步,保證執行緒安全

虛擬機會保證乙個類的構造器()方法在多執行緒環境中被正確地載入,同步,如果多個執行緒同時去初始化乙個類,那麼只有乙個執行緒去執行這個類的.

public class singleton

public static singleton getinstance()

}

概念:

實現一對多的依賴關係,當一方改變時,存在依賴關係的多方可以做出更改。

即發布訂閱關係,發布者發布訊息,存在訂閱關係的訂閱者可以接收訊息。

包含的類

定義被觀察者介面

public inte***ce iobservable
定義觀察者介面
public inte***ce iobserver
具體被觀察者實現
public class myobservable impelement iobservable

@override

public void registobserver(iobserver o)

}@override

public void removeobserver(iobserver o)

}@override

public void notifyobserver()

}

概念:

集中建立產品的類,是呼叫者和具體建立例項類分離開來,實現解偶

概念與步驟

又叫靜態工廠模式,通過工廠類根據型別建立不同的例項類。

優點:結構簡單,便於理解。客戶不用關心具體的類的建立過程。

缺點:**邏輯較其他工廠模式複雜,新增產品時必須修改工廠類。當需要建立的模擬較多時,工廠類會變的較為臃腫。

//需建立的例項類的共同點

public inte***ce car

//具體例項

public class audi

}public class baoma

}//工廠類

public class ca***ctory

return car;

}}

概念與步驟

把工廠類抽象出去,建立例項由具體的工廠類實現,針對每乙個產品都由自己的具體工廠類實現。

優點:呼叫者無需關心產品的實現,只需要關心產品的介面。增加新的產品時,只要介面不變,不需要修改工廠類的邏輯,實現解偶。

缺點:模擬較多,如果需要建立多個產品的時候專案結構會比較大。

//抽象工廠介面

public inte***ce ifactory

//具體工廠類

public class audifactory impelement ifactory

}//抽象產品

public inte***ce car

//具體的產品

public class audi impelement car

}//新增產品時新增產品類及產品工廠類

概念與步驟

具有關聯功能的產品作為乙個產品族。 步驟:抽象工廠類,定於具體工廠類必須要實現的方法。

具體工廠類,建立一族產品;抽象產品類:定義產品的共性。具體產品類:建立具體的產品。

優點:具有工廠方法模式的優點外,另外可以在類內對產品族進行約束。

缺點:擴充套件比較麻煩。

試用場景:當建立的物件是一系列相互關聯或相互依賴的產品族時適用。

//抽象工廠類

public inte***ce abstractfactory

//抽象產品類

public abstract class abstractcar

public abstract class abstractplane

//具體工廠類

public class bigfactory implements abstractfactory

@override

public abstractplane createplane()

}//具體產品類

public class bigcar extends abstractcar

}class bigplane extends abstractplane

}

java設計模式 觀察者模式

本例以貓和老鼠來講解觀察者,首先定義觀察者為 老鼠和主人,被觀察者為貓,如下 public inte ce observer public class event public string getname public class mouse implements observer public ...

Java設計模式 觀察者模式

在物件之間定義一對多的依賴關係,這樣一來,當乙個物件改變狀態,依賴它的物件都會收到通知,並自動更新。比如有乙個天氣的資料來源,和需要獲取天氣資料的觀察者。天氣資料不定時更新。而觀察者也是隨時訂閱和取消訂閱天氣資料來源。在訂閱時,希望每次天氣資料更新時觀察者都可以獲取資訊。天氣資料來源作為被觀察的主題...

Java設計模式 觀察者模式

觀察者模式是乙個使用率非常高的的模式,它是一套訂閱 發布系統,這個模式最重要的作用就是將訂閱者和被訂閱者解耦。定義物件間一種對多種的依賴關係,使得每當乙個物件改變狀態,則所有依賴於它的物件都會得到通知。subject 抽象主題類,也就是被觀察者 observable 把所有觀察者物件儲存在乙個集合裡...