面向對象設計,一個必不可少的步驟是“實例化”,如果將實例化與具體的實現緊密地結合在一起……簡單的創建,當然這是沒有問題的,但是,如果我們不是簡單的創建呢,我們需要改變具體的算法,需要擴展算法的種類,需要系統在改變之後還是以前的樣子運行!那麼,問題就會變得復雜,多變! 在創建型的幾個設計模式中,將具體算法的實現與實例化分離,工廠方法是這方面的典范,其他的創建型設計模式起到擴展和輔助的作用! 在書中舉得那些例子,都很有趣,大家可以好好看看,在這裡咱們說說一些擴展的知識。 反射:我個人膚淺的理解是,應用程序在運行時,可以動態地獲得一個類型的屬性,方法,事件等信息,這樣就可以在工廠中動態地創建一個對象了! c#代碼: [csharp] Assembly.Load("程序集") //Assembly.LoadFile("外部調用的動態庫")加載程序集,返回類型是一個Assembly 實際應用: [csharp] //引入反射 using System.Reflection; //引入config配置文件 using System.Configuration ; //反射優化抽象工廠 //根據配置文件選擇創建查詢方式 class DateAccess { private static readonly string AssemblyName = "shujuku"; //利用配置文件:1,添加引用system.configuration ; 2, using system.configuration //讀取配置文件app.config裡的DB private static readonly string db = ConfigurationManager.AppSettings["DB"]; //private static readonly string db = "Sqlserver"; //靜態函數創建用戶表 public static IUser CreateUser() { string classname = AssemblyName + "." + db + "User"; //利用反射創建對象 return (IUser)Assembly.Load(AssemblyName).CreateInstance(classname); } //靜態函數創建表 public static IDepartment CreateDepartment() { string classname = AssemblyName + "." + db + "Department"; //利用反射創建對象 return (IDepartment )Assembly.Load(AssemblyName).CreateInstance(classname); } } 在程序設計中,創建型模式已經給我們帶來了意想不到的好處,讓我們的工作更輕松,簡單,但是不要忘了一種模式只是解決一種特定的問題,下次我們將介紹更多的模式,解決更多的問題!