更新時間:2022-05-19 09:47:24 來源:動力節點 瀏覽1068次
設計模式是為重復性和典型項目問題提供解決方案的現成描述。
它們是經驗、辛勤工作和大量試驗和錯誤的結果。它們還代表了面向對象編程的深思熟慮和最佳實踐(SOLID、DRY、KISS和YAGNI)。這些模式成為程序員之間交流的一個元素,它們是每個工程師入門的一個元素。
一般來說,設計模式只不過是重復問題的演練,值得寫下來和理解。值得注意的是,設計模式并不建議直接實現解決方案,而只是一個結構的輪廓,其中包含一些應該適應我們需求的特征方面。
想象一下,一位程序員同事試圖向您解釋小部件和通過 SOAP 通信的類之間的流是如何工作的。
值得注意的是,設計模式并沒有同質的劃分,而且通常與該主題的研究一樣多。
創造模式
結構圖案
行為模式
每種設計模式都適用于確定的情況。在不恰當的情況下使用它們可能弊大于利!
在本文中,我們將限制自己選擇的模式。
創建模式與創建對象的控制機制相關聯。形成對象的基本模式在某些項目中可能存在問題,并可能導致某些領域不必要的復雜性。創建模式應該防止出現問題并引入對創建對象的更多控制。他們的任務是將對象的創建、完成和表示過程分開。
有五種眾所周知的設計模式可以在廣泛的編程語言中實現:
抽象工廠模式
建造者模式
工廠方法模式
原型模式
單例模式
在本文中,我們將仔細研究工廠方法和單例方法。
單例模式最多提供給定類的一個實例和對其引用的全局訪問。由于它違反了兩個 SOLID 規則(單一責任原則和開放/封閉原則),因此經常被呈現為反模式,有時它被過度使用并且經常被視為全局變量的對象替代品。在多線程環境中實現時也碰巧有問題。
如果您的應用程序需要對同一資源進行全局訪問,請使用此模式。
您可以在下面找到 CiviCRM 3.4 中單例的示例性實現:
_session = & $ _SESSION ;
$這個->創建();
}
靜態函數&單例()
{
if ( self :: $ _singleton === null ) {
自我:: $ _singleton =新CRM_Core_Session ;
}
返回自我:: $ _singleton ;
}
// 其他方法
}
工廠方法模式是最著名的設計模式之一。
它的任務是向客戶端隱藏創建對象的細節,同時提供生成它們的接口。實現接口的類決定創建對象的類。
客戶端期望接口或抽象類的安全實現,但對特定實現不感興趣。然而,程序員可以很容易地用額外的對象類擴展工廠的產品組合。
在設計您的應用程序時,值得考慮的是應用程序是否真的需要目標工廠。如果一個產品有許多具有相似基類的類,并且您在接口或抽象類中操作對象,那么工廠方法模式肯定會很有用。
抽象工廠模式更進一步,向更高層次的抽象移動(因此得名)。在這種情況下,客戶不知道使用什么樣的工廠。抽象工廠提供了一個用于創建客戶端使用的依賴對象組的接口,但沒有給出它們的確切實現。
對于用戶自定義接口可用的特定產品的創建,通常使用基于工廠方法模式或原型模式的工廠(這里不討論)。
工廠方法模式和抽象工廠模式之間的主要區別在于,在前者中,客戶收到一個產品,而在后者中,客戶收到整個產品組。
下圖將有助于理解抽象工廠的概念:
/ **
抽象的第一類實現
* /
抽象類AbstProduct1 {
公共抽象無效動作();
}
類Product1A擴展AbstProduct1 {
Product1A (字符串參數){
系統。出來。println ( "我" + arg );
}
公共無效動作(){ };
}
類Product1B擴展AbstProduct1 {
ProductA2 (字符串參數){
系統。出來。println ( "我" + arg );
}
公共無效動作(){ };
}
/ **
抽象的二等實現
* /
抽象類AbstProduct2 {
}
類Product2A擴展AbstProduct2 {
Product2A (字符串參數){
系統。出來。println ( "我" + arg );
}
}
類Product2B擴展AbstProduct2 {
ProductB2 (字符串參數){
系統。出來。println ( "我" + arg );
}
}
/ **
抽象工廠實現
* /
抽象類AbstractFactory {
抽象AbstProduct1 createProduct1 ();
抽象AbstProduct2 createProduct2 ();
}
類FactoryA擴展AbstractFactory {
AbstProduct1 createProduct1 () {
返回新的Product1A (“Product1A” );
}
AbstProduct2 createProduct2 () {
返回新的Product2A (“Product2A” );
}
}
類FactoryB擴展AbstractFactory {
AbstProduct1 createProduct1 () {
返回新的Product1B ( "Product1B" );
}
AbstProduct2 createProduct2 () {
返回新的Product2B (“Product2B” );
}
}
// 一些工廠操作
類FactoryMaker {
私有靜態AbstractFactory pf = null ;
靜態AbstractFactory getFactory (字符串選擇){
如果(選擇。等于(“a” )){
pf =新工廠A ();
} else if (選擇.等于( "b" )) {
pf =新工廠 B ();
}返回pf ;
}
}
// 客戶端
公共類ClientApp {
公共靜態無效主要(字符串參數[]){
AbstractFactory pf = FactoryMaker 。獲取工廠(“一” );
AbstractProductA產品= pf 。創建產品1 ();
}
}
行為模式的任務是為與對象間通信相關的解決方案引入靈活性。它們專注于在通信對象之間分配特定的角色和職責。
這種模式是:
模式迭代器
觀察者模式
命令模式
策略模式
模板方法模式
這些模式最重要的特點是通過找到一種簡單的方法來實現實體之間的依賴關系,從而方便操作和設計應用程序。由于這種模式,設計包含獨立類庫的應用程序更容易。
以下結構模式是最著名的結構模式之一:
模式適配器
裝飾圖案
立面圖案
代理模式
復合圖案
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習