對課本的總結,首先回顧一下課本上抽象工廠模式例子的發展過程如下三個階段:
階段一、只有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("命名空間.類名稱")
優點:用反射可以簡化工廠代碼的複雜程度。
感受:這個設計模式我學習了三個多小時,但學習效果還是可以的,就是時間有點長,要慢慢提高學習效率。另外,在學習的這個模式過程中,碰見覆雜點的知識,我就想着放棄,但立馬我就對自己說只要看進去就可以看懂。結果證明我需要這樣的心理暗示,這樣的心理暗示可以讓我集中精神。
我們學習過程中,應該都會有各種不同的情況,但遇到不好的情況時,不防給自己積極的心理暗示,效果不錯。