设计模式-工厂模式学习(初级)
生活随笔
收集整理的這篇文章主要介紹了
设计模式-工厂模式学习(初级)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
個人不善于表達 思路見于代碼 [歡迎大神拍磚批評指點]
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Configuration; using System.Reflection;namespace SelfToolsHelper {public interface Ilog{void CreateLog();}public class EventLog : Ilog{public void CreateLog(){Console.Write("Create EventLog");}}public class TxtLog : Ilog{public void CreateLog(){Console.Write("createTxtLog");}}public class DiskLog : Ilog{public void CreateLog(){Console.Write("Create DiskLog");}}public interface IFactory{Ilog CreateLogFactory();}public class EventFactory : IFactory{public Ilog CreateLogFactory(){return new EventLog();}}public class TexFactory : IFactory{public Ilog CreateLogFactory(){return new TxtLog();}}public class DiskFactory : IFactory{public Ilog CreateLogFactory(){return new DiskLog();}}//思考 要是有1w個 log 那 我要建立兩萬個class (log and factory) ,多付出1w的工作量。//是否可以優化我的factory方法?public class FactoryNew<T>{public object CreateLogInstance(){return Activator.CreateInstance<T>();}}public class FactoryTEST{public void TEST(){IFactory factory = new DiskFactory();Ilog log = factory.CreateLogFactory();log.CreateLog();//面向接口抽象,打印出:Create DiskLog }public void TestNew(){FactoryNew<EventLog> eventfact =new FactoryNew<EventLog> ();Ilog log = eventfact.CreateLogInstance() as EventLog;log.CreateLog();}public void TestNewSecond(){FactoryNew<DiskLog> diskFactory = new FactoryNew<DiskLog>();Ilog log = diskFactory.CreateLogInstance() as DiskLog;log.CreateLog();}//以上兩個方法是在我知道 到底是使用哪種log方法的測試。、//現在我不知道我到底要實例化哪種log 而是讀取配置文件 來動態創建 這樣該怎么辦?
//思路 我應該從配置文件里面知道我到底改實例一個什么泛型的工廠 就是說我應該傳遞什么類型進入 泛型工廠?// 假如 配置在了config文件中。//1<appSettings>//<add key="logtype" value="EventLog"></add>//</appSettings>public void TestNewThrid(){string strfactoryName = ConfigurationSettings.AppSettings["logtype"];#region 此部分是思考過程object o= Activator.CreateInstance(Assembly.GetCallingAssembly().FullName, strfactoryName);Type t = o.GetType();//得帶log type。 然后根據logtype 再聲明 facttorynew<T>;object obj =Assembly.Load(Assembly.GetCallingAssembly().FullName).CreateInstance(strfactoryName);// FactoryNew < typeof(obj) > diskFactory = new FactoryNew< typeof(obj) >(); 走不通。// obj.調用方法。。。。。。。 失敗了!//思考,我為什要先創建factory 再創建log?!!! 我的目的是創建Log 。額 log log已經創建了。。。。// 這里才是真正實現,注意 配置config的時候直接使用 log Type!跳過FactoryIlog logObj = Assembly.Load(Assembly.GetCallingAssembly().FullName).CreateInstance(strfactoryName) as Ilog;logObj.CreateLog();//搞定。//#endregion} }}
// 參考資料 http://terrylee.cnblogs.com/archive/2006/01/04/310716.html
?2013年9月26日 14:25:51
轉載于:https://www.cnblogs.com/cdemo/p/3340736.html
總結
以上是生活随笔為你收集整理的设计模式-工厂模式学习(初级)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 元素的前后关系
- 下一篇: asp.net ajax控件工具集 Au