抽象工廠模式(abstract factory)定義:提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。
工廠方法模式與抽象工廠模式的區別在於:工廠方法是定義乙個用於建立物件的介面,而抽象工廠是定義一系列。
**背景:假設user表裡有兩個字段:id和name,要求寫一段程式,讓兩種資料庫語言實現對這倆字段的插入和查詢。
user錶類:使用者類,假設只有id和name兩個字段
class
user
set}
public
string name //屬性name
set}
}
iuser介面:使用者客戶端訪問,解除與具體資料庫訪問的耦合。
inte***ce
iuser
sqlserveruser類:用於訪問sql server的user
class
sqlserveruser
:iuser
//實現介面
public
user
getuser
(int id)
}
accessuser類:用於訪問access的user,與sqlserveruser類似,略
ifactory介面:定義乙個建立訪問user表物件的抽象的工廠介面
inte***ce
ifactory
sqlserve***ctory類:
class
sqlserve***ctory
:ifactory
//實現ifactory介面
}
accessfactory類:與sqlserve***ctory類似,略
客戶端:
static
void
main
(string
args)
**背景:和以上相同,資料庫裡增加了乙個部門表(department表)
優點:
缺點:
idepartment介面:用於客戶端訪問,解除與具體資料庫訪問的耦合。
inte***ce
idepartment
//用於客戶端訪問,解除於具體資料庫訪問的耦合
兩種資料庫語言訪問department表:
class
sqlseverdepartment
:idepartment
//sql
public
department
getdepartment
(int id)
}class
accessdepartment
:idepartment
//access
}
ifactory:
inte***ce
ifactory
sqlserve***ctory:
class
sqlserve***ctory
:ifactory
public
idepartment
createdepartment()
//增加了sqlseverdepartment工廠
}
accessfactory:與sqlserve***ctory類似,省略
客戶端**:
dataaccess類:取代ifactory、sqlserve***ctory類和accessfactory類
class
dataaccess
return result;
}public
static
idepartment
createdepartment()
return result;
}}
客戶端:
這樣寫是簡單了,但是要增加一種資料庫訪問就比較麻煩了。
死鎖了,怎麼辦?
早晨,迷糊的兩個室友乙個拿了牙膏,乙個拿了牙刷。兩個人同時,想拿到對方的東西,好在乙個室友發現自己拿錯了,相視一笑,說句調侃的話,就完事啦。如果在計算機中,只用一套牙膏牙刷。此時兩個程序,迴圈等待,便構成了死鎖。聽老師說這是個很嚴肅的問題,我們要認真對待 嚴肅臉 那麼死鎖了,怎麼辦呢?老師說,書上都...
失戀了怎麼辦?
蘇格拉底 孩子,為什麼悲傷?失戀者 我失戀了。蘇格拉底 哦,這很正常。如果失戀了沒有悲傷,戀愛大概也就沒有什麼味道了。可是,年輕人,我怎麼發現你對失戀的投入甚至比你對戀愛的投入還要傾心呢?失戀者 到手的葡萄給丟了,這份遺憾,這份失落,您非個中人,怎知其中的酸楚啊。蘇格拉底 丟了就丟了,何不繼續向前走...
焦慮了怎麼辦?
閱讀本文大概需要 3 分鐘。最近節奏有點亂了,沒有鍛鍊身體,精神狀態也很疲憊,今天差點食言沒有發文,要求自己每週一次更新頻率並不高,為什麼還是做不好呢?我反思了下,可能是慾望,什麼事情都想做一下,好幾個事情都列入了代辦事項,每天忙的似乎很充實,實則內心非常的空虛 焦慮,無法進入心流狀態,自然效率低下...