【設計模式】抽象工廠模式

對課本的總結,首先回顧一下課本上抽象工廠模式例子的發展過程如下三個階段

階段一、只有user和sqlserveruser。

階段二、把Sqlserveruser抽象爲接口IUser,可以便於擴展,在這裏擴展出一個AcessUser; 
     爲了讓接口IUser去和user發生關係,解除了user和具體數據庫的耦合,增加了一個訪問User對象的抽象工廠接口:IFactory.
這裏是工廠方法


階段三、實際情況不可能僅僅有一個User表,還有很多,比如增加一個Department表。那麼如上 User表,需要增加一個IDepartment,及SqlserverDepartment和AccessDepartment。以及修改IFactory、SqlserverFactory、AccessFactory的方法,增加一個方法:CreatDepartment()。

這是抽象工廠模式。



抽象工廠模式是提供一個創建一系列相關或相互依賴對象的接口,而無需制定他們具體的類。
(上述例子中IFactory就是User和Department等一系列表的接口。)
優點
1、易於交換產品系列;
2、具體創建實例過程與客戶端分離,客戶端通過他們的抽象接口操縱實例,產品的具體類名也被具體工廠的實現分離,不會出現在客戶端,使得客戶端簡單。
(例子中1、便於把一系列表如:User、Department等,由Sqlserver替換到Access;
        2、實例化Sqlserveruser或AcessUser等通過IFactory的CreateUser()實現,使得客戶端不會出現具體的產品名。)

缺點:增加一個產品時,程序需要修改三處。

原則:開封原則和依賴倒轉原則。

爲了避免上述缺點,小菜用簡單工廠,把上述中的IFactory、SqlFactory、AccessFactory捨棄,改爲DataAccess.如下圖:


優點:同樣達到了解耦的目的,而且減少了類,使得修改起來更加的藝術。
缺點:若再增加一個數據庫的話,需要修改代碼,在每個switch下增加相應代碼,而抽象工廠就比較簡單,直接擴展一個數據庫工廠即可。

運用反射技術,可以避免上述switch或if的問題,更加的優秀!

那麼什麼是反射技術呢?
    大家還是看百科吧!我還有待進一步學習。

反射技術不明白,別不代表不會用。只要會套用格式就行,格式如下
Assembly.Load("程序集名稱").CreateInstance("命名空間.類名稱")

優點:用反射可以簡化工廠代碼的複雜程度。

感受:這個設計模式我學習了三個多小時,但學習效果還是可以的,就是時間有點長,要慢慢提高學習效率。另外,在學習的這個模式過程中,碰見覆雜點的知識,我就想着放棄,但立馬我就對自己說只要看進去就可以看懂。結果證明我需要這樣的心理暗示,這樣的心理暗示可以讓我集中精神。
    我們學習過程中,應該都會有各種不同的情況,但遇到不好的情況時,不防給自己積極的心理暗示,效果不錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章