日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式-工厂模式学习(初级)

發布時間:2025/5/22 asp.net 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式-工厂模式学习(初级) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

個人不善于表達 思路見于代碼 [歡迎大神拍磚批評指點]

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

總結

以上是生活随笔為你收集整理的设计模式-工厂模式学习(初级)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。