抽象工廠模式 換DB了怎麼辦

2021-10-11 14:30:46 字數 2665 閱讀 2288

抽象工廠模式(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 分鐘。最近節奏有點亂了,沒有鍛鍊身體,精神狀態也很疲憊,今天差點食言沒有發文,要求自己每週一次更新頻率並不高,為什麼還是做不好呢?我反思了下,可能是慾望,什麼事情都想做一下,好幾個事情都列入了代辦事項,每天忙的似乎很充實,實則內心非常的空虛 焦慮,無法進入心流狀態,自然效率低下...