1.Abstract Factory : 提供一個建立一系列相關或互相依賴物件的介面,而無需指定他們的類別。
結構圖:可以參考大話設計模式:P220
2.實際案列:若想要抽換兩種不同DB該如何無痛抽換?
此案列UML圖
上圖對應至P220圖
IFactory:就是AbstractFactory
IUser:就是AbstractProductA
IDepartment:就是AbstractProductB
SqlserverFactory:就是ConcreteFactory1
AccessFactory:就是ConcreteFactory2
特別注意:
1. SqlserverFactory 參考到IUser (用到public IUser CreateUser())
2. SqlserverFactory dependence 到 SqlserverUser class and SqlserverDepartment class ( new SqlserverUser(); and new SqlserverDepartment(); )
AccessFactory 以上面觀念類推。
3. 程式Example
塞資料用的class(不是重點)
IUser Interface
SqlserverUser以及AccessUser class 用來模擬插入資料到兩種不同DB內的User Data Table
SqlserverUser以及AccessUser class 實做 IUser
IDepartment Interface : 意義同於 IUser Interface(功用插入不同資料表,一個插入User table 另一個插入Department Table)
SqlserverDepartment and AccessDepartment class 實做 IDepartment
IFactory介面: 有參考到 IUser以及IDepartment
SqlServerFactory and AccessFactory class 實做 IFactory 的CreateUser()以及CreateDepartment()方法
主程式(控制台檔案非網頁程式)
4.好處
第一個好處:IFactory factory = new AccesssFactory() 只需要改變成 IFactory factory = new SqlserverFactory() 即可轉換成Sqlserver的方法。
第二個好處:client 端是在操做Interface 而非操做class