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

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 melomelo1988 的頭像
    melomelo1988

    melo 唐

    melomelo1988 發表在 痞客邦 留言(0) 人氣()