設計模式(二)

2022-07-06 18:03:09 字數 2140 閱讀 3528

單例模式

​ 單例物件的類必須保證只有乙個例項存在。

​ 使用場景:

需要頻繁的例項化然後銷毀的物件

建立物件時耗時過多或者消耗資源過多,但又經常用的的物件。

有狀態的工具類物件。

頻繁訪問資料庫或檔案的物件。

有狀態:就是有儲存資料的功能,有狀態物件,就是有例項變數的物件,可以儲存資料,非執行緒安全

無狀態:就是一次操作,不儲存資料,無狀態物件,就是沒有例項變數的物件,不儲存資料,不變類,執行緒安全

常見寫法:

惡漢式

public class singleton 

public static singleton getinstance()

}

懶漢式

public class singleton 

public static singleton getinstance()

return singleton;

}}

雙重檢查鎖

volatitle禁止指令重排,所有的寫(write)操作都將發生在讀(read)操作之前。例項化物件的過程,1. 分配記憶體空間,2.初始化物件,3.將物件指向剛分配的記憶體空間,編譯器為了效能原因,將2和3重排序,

public class singleton 

public static singleton getinstance()}}

return singleton;

}}

匿名內部類

jvm會保證乙個類的初始化方法會在多執行緒環境中正確加鎖,同步,如果多個執行緒去初始化同乙個類,只有乙個執行緒執行初始化方法,其他執行緒會阻塞,注意當乙個執行緒執行完畢初始化方法後,其他執行緒被喚醒也不會執行初始化方法了,乙個類只會初始化一次

public class singleton

private static class sinleton01

public static singleton getinstance()

}

列舉類

public enum singleton

注:可以通過反射破壞單利

public class client 

}

也可阻止,在私有的構造方法中加乙個判斷。

private singleton()

}

命令模式

包含角色

**

/**

* 抽象接收者,每個具體接收者都必須完成的命令

*/public abstract class receiver

public class concretereceiver1 extends receiver

}public class concretereceiver2 extends receiver

}

public abstract class command
public class concretecommand1 extends command 

//必須實現乙個命令

public void execute()

}public class concretecommand2 extends command

//必須實現乙個命令

public void execute()

}

public class invoker 

//執行命令

public void action()

}

public class client 

}

命令模式的優缺點

優點類間解耦 :呼叫者角色與接收者之間沒有任何依賴關係

可擴充套件性

缺點當命令增加,導致命令類過多,臃腫

設計模式(二) 原型設計模式

官方定義 使用原型例項指定建立物件的種類,並通過複製這個原型建立新的物件 通俗的講就是根據乙個原型建立乙個新的物件 建立的方式實質就是拷貝原型自己 而且不需要知道新物件建立的細節 1 某些物件組合起來特別複雜,而重新建立費時又費力,此時通過拷貝能達到其目的 通過 說明問題 1 定義乙個協議 impo...

設計模式 二

php物件導向設計模式中,工廠模式,從字面中就能夠以理解為,工廠模式就是在不改變原來 的結構的基礎上,依據需求的新增類定義去完畢 php header content type text html charset utf8 php設計模式 二 工廠模式 定義介面db類 inte ce db clas...

設計模式(二)

工廠模式 factory 允許你在 執行時例項化物件。它之所以被稱為工廠模式是因為它負責 生產 物件。工廠方法的引數是 你要生成的物件對應的類名稱。抽象基類 類中定義抽象一些方法,用以在子類中實現 繼承自抽象基類的子類 實現基類中的抽象方法 工廠類 用以例項化所有相對應的子類class exampl...