1.策略模式(Strategy Pattern)
定義了算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨立于算法的客戶。
2.觀察者模式(Observer)
定義了對象之間的一對多依賴。當一個對象改變狀態時,它的所有依賴者都會收到通知并自動更新。
3.裝飾者模式
動態地將責任附加在對象上。
裝飾者和被裝飾對象有相同的超類型。
4.工廠模式
定義一個創建對象的接口,但由子類決定要實例化的類是哪一個。
工廠方法讓類把實例化推遲到子類。
創建者Creator和產品類Products
抽象工廠模式
提供一個接口,用于創建相關或依賴對象的家族,而不需要明確指定具體類。
工廠模式:
一個抽象產品類,可以派生出多個具體產品類。
一個抽象工廠類,可以派生出多個具體工廠類。
每個具體工廠類只能創建一個具體產品類的實例。
抽象工廠模式:
多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。
一個抽象工廠類,可以派生出多個具體工廠類。
每個具體工廠類可以創建多個具體產品類的實例。
區別:
工廠模式只有一個抽象產品類,而抽象工廠模式有多個。
工廠模式的具體工廠類只能創建一個具體產品類的實例,而抽象工廠模式可以創建多個。
5.單件模式(Single Pattern)
確保一個類只有一個實例,并提供一個全局訪問點。
//懶漢式單例類.在第一次調用的時候實例化自己
public class Singleton?{
? ? ? ? private Singleton()?{}
? ? ? ? ?private static Singleton?single=null;
? ? ? ? ? //靜態工廠方法
? ? ? ? ?public static Singleton?getInstance()?{
? ? ? ? ? ? ? ? ? ? ?if(single?==null)?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? single?=new Singleton();
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? return ?single;
? ? ? ? ? }
}
//餓漢式單例類.在類初始化時,已經自行實例化
public class Singleton1?{
? ? ? ? ? ? ?private Singleton1()?{}
? ? ? ? ? ? ?private static final Singleton1?single?=new Singleton1();
? ? ? ? ? ? ? //靜態工廠方法
? ? ? ? ? ? ? public static Singleton1?getInstance()?{
? ? ? ? ? ? ? ? ? ? ? ? ? return single;
? ? ? ? ? ? ? ?}
}
餓漢就是類一旦加載,就把單例初始化完成,保證getInstance的時候,單例是已經存在的了,而懶漢比較懶,只有當調用getInstance的時候,才回去初始化這個單例。
6.命令模式
將“請求”封裝成對象,以便使用不同的請求。
角色:
Command
定義命令的接口,聲明執行的方法。
ConcreteCommand
命令接口實現對象,是“虛”的實現;通常會持有接收者,并調用接收者的功能來完成命令要執行的操作。
Receiver
接收者,真正執行命令的對象。任何類都可能成為一個接收者,只要它能夠實現命令要求實現的相應功能。
Invoker
要求命令對象執行請求,通常會持有命令對象,可以持有很多的命令對象。這個是客戶端真正觸發命令并要求命令執行相應操作的地方,也就是說相當于使用命令對象的入口。
Client
創建具體的命令對象,并且設置命令對象的接收者。
7.適配器模式
將一個類的接口,轉換成客戶期望的另一個接口。
8.外觀模式
提供一個統一的接口,用來訪問子系統中的一群接口。