¸ÅÊö
ÔÚÈí¼þϵͳÖУ¬¾³£ÃæÁÙ×Å¡°Ä³¸ö¶ÔÏ󡱵Ĵ´½¨¹¤×÷£¬ÓÉÓÚÐèÇóµÄ±ä»¯£¬Õâ¸ö¶ÔÏóµÄ¾ßÌåʵÏÖ¾³£ÃæÁÙמçÁҵı仯£¬µ«ÊÇËüÈ´ÓµÓбȽÏÎȶ¨µÄ½Ó¿Ú¡£ÈçºÎÓ¦¶ÔÕâÖֱ仯£¿ÌṩһÖÖ·â×°»úÖÆÀ´¸ôÀë³ö¡°Õâ¸öÒ×±ä¶ÔÏ󡱵ı仯£¬´Ó¶ø±£³ÖϵͳÖС°ÆäËüÒÀÀµ¸Ã¶ÔÏóµÄ¶ÔÏó¡±²»Ëæ×ÅÐèÇóµÄ¸Ä±ä¶ø¸Ä±ä£¿Õâ¾ÍÊÇҪ˵µÄFactory
MethodģʽÁË¡£
Òâͼ
¶¨ÒåÒ»¸öÓû§´´½¨¶ÔÏóµÄ½Ó¿Ú£¬ÈÃ×ÓÀà¾ö¶¨ÊµÀý»¯ÄÄÒ»¸öÀà¡£Factory Methodʹһ¸öÀàµÄʵÀý»¯ÑÓ³Ùµ½Æä×ÓÀà¡£
½á¹¹Í¼

Éú»îÖеÄÀý×Ó
¹¤³§·½·¨¶¨ÒåÒ»¸öÓÃÓÚ´´½¨¶ÔÏóµÄ½Ó¿Ú£¬µ«ÊÇÈÃ×ÓÀà¾ö¶¨ÊµÀý»¯ÄĸöÀࡣѹע³ÉÐÍÑÝʾÁËÕâÖÖģʽ¡£ËÜÁÏÍæ¾ßÖÆÔìÉ̼ӹ¤ËÜÁÏ·Û£¬½«ËÜÁÏ×¢È뵽ϣÍûÐÎ×´µÄÄ£¾ßÖС£Íæ¾ßµÄÀà±ð£¨³µ£¬ÈËÎïµÈµÈ£©ÊÇÓÉÄ£¾ß¾ö¶¨µÄ¡£

¹¤³§·½·¨½â˵
ÔÚ¹¤³§·½·¨Ä£Ê½ÖУ¬ºËÐĵŤ³§À಻ÔÙ¸ºÔðËùÓвúÆ·µÄ´´½¨£¬¶øÊǽ«¾ßÌå´´½¨¹¤×÷½»¸ø×ÓÀàÈ¥×ö¡£Õâ¸öºËÐÄÀà½ö½ö¸ºÔð¸ø³ö¾ßÌ幤³§±ØÐëʵÏֵĽӿڣ¬¶ø²»½Ó´¥ÄÄÒ»¸ö²úÆ·À౻ʵÀý»¯ÕâÖÖϸ½Ú¡£ÕâʹµÃ¹¤³§·½·¨Ä£Ê½¿ÉÒÔÔÊÐíϵͳÔÚ²»Ð޸Ť³§½ÇÉ«µÄÇé¿öÏÂÒý½øÐ²úÆ·¡£ÔÚFactory
MethodģʽÖУ¬¹¤³§ÀàÓë²úÆ·ÀàÍùÍù¾ßÓÐÆ½Ðеĵȼ¶½á¹¹£¬ËüÃÇÖ®¼äÒ»Ò»¶ÔÓ¦¡£
ÏÖÔÚÎÒÃÇ¿¼ÂÇÒ»¸öÈÕÖ¾¼Ç¼µÄÀý×Ó£¨ÕâÀïÎÒÃÇÖ»ÊÇΪÁË˵Ã÷Factory Methodģʽ£¬Êµ¼ÊÏîÄ¿ÖеÄÈÕÖ¾¼Ç¼²»»áÕâôȥ×ö£¬Ò²Òª±ÈÕ⸴ÔÓһЩ£©¡£¼Ù¶¨ÎÒÃÇÒªÉè¼ÆÈÕÖ¾¼Ç¼µÄÀ֧࣬³Ö¼Ç¼µÄ·½·¨ÓÐFileLogºÍEventLogÁ½ÖÖ·½Ê½¡£ÔÚÕâÀïÎÒÃÇÏȲ»Ì¸Éè¼ÆÄ£Ê½£¬ÄÇôÕâ¸öÈÕÖ¾¼Ç¼µÄÀà¾ÍºÜºÃʵÏÖÁË£º
public class Log 5 { 6 7 public void WriteEvent() 8 { 9 Console.WriteLine("EventLog Success!"); 10 } 11 12 public void WriteFile() 13 { 14 Console.WriteLine("FileLog Success!"); 15 } 16 17 public void Write(string LogType) 18 { 19 switch(LogType.ToLower()) 20 { 21 case "event": 22 WriteEvent(); 23 break; 24 25 case "file": 26 WriteFile(); 27 break; 28 29 default: 30 break; 31 } 32 } 33 } |
ÕâÑùµÄ³ÌÐò½á¹¹ÏÔÈ»²»ÄÜ·ûºÏÎÒÃǵÄÒªÇó£¬Èç¹ûÎÒÃÇÔö¼ÓÒ»ÖÖеÄÈÕÖ¾¼Ç¼µÄ·½Ê½DatabaseLog£¬ÄǾÍÒªÐÞ¸ÄLogÀà£¬Ëæ×żÇ¼·½Ê½µÄ±ä»¯£¬switchÓï¾äÔÚ²»¶ÏµÄ±ä»¯£¬ÕâÑù¾ÍÒýÆðÁËÕû¸öÓ¦ÓóÌÐòµÄ²»Îȶ¨£¬½øÒ»²½·ÖÎöÉÏÃæµÄ´úÂ룬·¢ÏÖ¶ÔÓÚEventLogºÍFileLogÊÇÁ½ÖÖÍêÈ«²»Í¬µÄ¼Ç¼·½Ê½£¬ËüÃÇÖ®¼ä²»Ó¦¸Ã´æÔÚ±ØÈ»µÄÁªÏµ£¬¶øÓ¦¸Ã°ÑËüÃÇ·Ö±ð×÷Ϊµ¥¶ÀµÄ¶ÔÏóÀ´¶Ô´ý¡£
public class EventLog 5{ 6 public void Write() 7 { 8 Console.WriteLine("EventLog Write Success!"); 9 } 10} 11 12/// <summary> 13/// FileLogÀà 14/// </summary> 15public class FileLog 16{ 17 public void Write() 18 { 19 Console.WriteLine("FileLog Write Success!"); 20 } 21} |
½øÒ»²½³éÏó£¬ÎªËüÃdzéÏó³öÒ»¸ö¹²Í¬µÄ¸¸À࣬½á¹¹Í¼ÈçÏ£º

ʵÏÖ´úÂ룺
public abstract class Log 5{ 6 public abstract void Write(); 7} |
´ËʱEventLogºÍFileLogÀàµÄ´úÂëÓ¦¸ÃÈçÏ£º
public class EventLog:Log 5{ 6 public override void Write() 7 { 8 Console.WriteLine("EventLog Write Success!"); 9 } 10} 11/// <summary> 12/// FileLogÀà 13/// </summary> 14public class FileLog:Log 15{ 16 public override void Write() 17 { 18 Console.WriteLine("FileLog Write Success!"); 19 } 20} |
´ËʱÎÒÃÇÔÙ¿´Ôö¼ÓеļǼÈÕÖ¾·½Ê½DatabaseLogµÄʱºò£¬ÐèÒª×öÄÄЩÊÂÇ飿ֻÐèÒªÔö¼ÓÒ»¸ö¼Ì³Ð¸¸ÀàLogµÄ×ÓÀàÀ´ÊµÏÖ£¬¶øÎÞÐèÔÙÈ¥ÐÞ¸ÄEventLogºÍFileLogÀ࣬ÕâÑùµÄÉè¼ÆÂú×ãÁËÀàÖ®¼äµÄ²ã´Î¹ØÏµ£¬ÓֺܺõķûºÏÁËÃæÏò¶ÔÏóÉè¼ÆÖеĵ¥Ò»Ö°ÔðÔÔò£¬Ã¿Ò»¸öÀà¶¼Ö»¸ºÔðÒ»¼þ¾ßÌåµÄÊÂÇé¡£µ½ÕâÀïËÆºõÎÒÃǵÄÉè¼ÆºÜÍêÃÀÁË£¬ÊÂʵÉÏÎÒÃÇ»¹Ã»Óп´¿Í»§³ÌÐòÈçºÎÈ¥µ÷Óá£
ÔÚÓ¦ÓóÌÐòÖУ¬ÎÒÃÇҪʹÓÃijһÖÖÈÕÖ¾¼Ç¼·½Ê½£¬Ò²Ðí»áÓõ½ÈçÏÂÕâÑùµÄÓï¾ä£º
EventLog eventlog = new EventLog(); eventlog.Write(); |
µ±ÈÕÖ¾¼Ç¼µÄ·½Ê½´ÓEventLog±ä»¯ÎªFileLog£¬ÎÒÃǾ͵ÃÐÞ¸ÄËùÓгÌÐò´úÂëÖгöÏÖÉÏÃæÓï¾äµÄ²¿·Ö£¬ÕâÑùµÄ¹¤×÷Á¿ÊÇ¿ÉÏë¶øÖªµÄ¡£´Ëʱ¾ÍÐèÒª½âñî¾ßÌåµÄÈÕÖ¾¼Ç¼·½Ê½ºÍÓ¦ÓóÌÐò¡£Õâ¾ÍÒªÒýÈëFactory
MethodģʽÁË£¬Ã¿Ò»¸öÈÕÖ¾¼Ç¼µÄ¶ÔÏó¾ÍÊǹ¤³§ËùÉú³ÉµÄ²úÆ·£¬¼ÈÈ»ÓÐÁ½ÖּǼ·½Ê½£¬ÄǾÍÐèÒªÁ½¸ö²»Í¬µÄ¹¤³§È¥Éú²úÁË£¬´úÂëÈçÏ£º
public class EventFactory 5{ 6 public EventLog Create() 7 { 8 return new EventLog(); 9 } 10} 11/// <summary> 12/// FileFactoryÀà 13/// </summary> 14public class FileFactory 15{ 16 public FileLog Create() 17 { 18 return new FileLog(); 19 } 20} |
ÕâÁ½¸ö¹¤³§ºÍ¾ßÌåµÄ²úÆ·Ö®¼äÊÇÆ½ÐеĽṹ£¬²¢Ò»Ò»¶ÔÓ¦£¬²¢ÔÚËüÃǵĻù´¡ÉϳéÏó³öÒ»¸ö¹«ÓõĽӿڣ¬½á¹¹Í¼ÈçÏ£º

ʵÏÖ´úÂëÈçÏ£º
public abstract class LogFactory 5{ 6 public abstract Log Create(); 7} |
´ËʱÁ½¸ö¾ßÌ幤³§µÄ´úÂëÓ¦¸ÃÈçÏ£º
public class EventFactory:LogFactory 5{ 6 public override EventLog Create() 7 { 8 return new EventLog(); 9 } 10} 11/// <summary> 12/// FileFactoryÀà 13/// </summary> 14public class FileFactory:LogFactory 15{ 16 public override FileLog Create() 17 { 18 return new FileLog(); 19 } 20} |
ÕâÑùͨ¹ý¹¤³§·½·¨Ä£Ê½ÎÒÃǰÑÉÏÃæÄǶÔÏó´´½¨¹¤×÷·â×°ÔÚÁ˹¤³§ÖУ¬´ËʱÎÒÃÇËÆºõÍê³ÉÁËÕû¸öFactory MethodµÄ¹ý³Ì¡£ÕâÑù´ïµ½ÁËÎÒÃÇÓ¦ÓóÌÐòºÍ¾ßÌåÈÕÖ¾¼Ç¼¶ÔÏóÖ®¼ä½âñîµÄÄ¿µÄÁËÂ𣿿´Ò»Ï´Ëʱ¿Í»§¶Ë³ÌÐò´úÂ룺
public class App 5{ 6 public static void Main(string[] args) 7 { 8 LogFactory factory = new EventFactory(); 9 10 Log log = factory.Create(); 11 12 log.Write(); 13 } 14} |
ÔÚ¿Í»§³ÌÐòÖУ¬ÎÒÃÇÓÐЧµØ±ÜÃâÁ˾ßÌå²úÆ·¶ÔÏóºÍÓ¦ÓóÌÐòÖ®¼äµÄñîºÏ£¬¿ÉÊÇÎÒÃÇÒ²¿´µ½£¬Ôö¼ÓÁ˾ßÌ幤³§¶ÔÏóºÍÓ¦ÓóÌÐòÖ®¼äµÄñîºÏ¡£ÄÇÕâÑù¾¿¾¹´øÀ´Ê²Ã´ºÃ´¦ÄØ£¿ÎÒÃÇÖªµÀ£¬ÔÚÓ¦ÓóÌÐòÖУ¬Log¶ÔÏóµÄ´´½¨ÊÇÆµ·±µÄ£¬ÔÚÕâÀïÎÒÃÇ¿ÉÒÔ°Ñ
LogFactory factory = new EventFactory();
Õâ¾ä»°·ÅÔÚÒ»¸öÀàÄ£¿éÖУ¬ÈκÎÐèÒªÓõ½Log¶ÔÏóµÄµØ·½ÈÔÈ»²»±ä¡£ÒªÊÇ»»Ò»ÖÖÈÕÖ¾¼Ç¼·½Ê½£¬Ö»ÒªÐÞ¸ÄÒ»´¦Îª£º
LogFactory factory = new FileFactory();
ÆäÓàµÄÈκεط½ÎÒÃǶ¼²»ÐèҪȥÐ޸ġ£ÓÐÈË»á˵ÄÇ»¹ÊÇÐ޸ĴúÂ룬ÆäʵÔÚ¿ª·¢ÖÐÎÒÃǺÜÄѱÜÃâÐ޸쬵«ÊÇÎÒÃÇ¿ÉÒÔ¾¡Á¿×öµ½Ö»ÐÞ¸ÄÒ»´¦¡£
ÆäʵÀûÓÃ.NETµÄÌØÐÔ£¬ÎÒÃÇ¿ÉÒÔ±ÜÃâÕâÖÖ²»±ØÒªµÄÐ޸ġ£ÏÂÃæÎÒÃÇÀûÓÃ.NETÖеķ´Éä»úÖÆÀ´½øÒ»²½ÐÞ¸ÄÎÒÃǵijÌÐò£¬Õâʱ¾ÍÒªÓõ½ÅäÖÃÎļþÁË£¬Èç¹ûÎÒÃÇÏëʹÓÃÄÄÒ»ÖÖÈÕÖ¾¼Ç¼·½Ê½£¬ÔòÔÚÏàÓ¦µÄÅäÖÃÎļþÖÐÉèÖÃÈçÏ£º
<appSettings> 2 <add key="factoryName" value="EventFactory"></add> 3</appSettings> |
´Ëʱ¿Í»§¶Ë´úÂëÈçÏ£º
public class App 5{ 6 public static void Main(string[] args) 7 { 8 string strfactoryName = ConfigurationSettings.AppSettings["factoryName"]; 9 10 LogFactory factory; 11 factory = (LogFactory)Assembly.Load("FactoryMethod").CreateInstance("FactoryMethod." + strfactoryName); 12 13 Log log = factory.Create(); 14 log.Write(); 15 } 16} |
ÏÖÔÚÎÒÃÇ¿´µ½£¬ÔÚÒý½øÐ²úÆ·£¨ÈÕÖ¾¼Ç¼·½Ê½£©µÄÇé¿öÏ£¬ÎÒÃDz¢²»ÐèҪȥÐ޸Ť³§À࣬¶øÖ»ÊÇÔö¼ÓеIJúÆ·ÀàºÍÐµĹ¤³§ÀࣨעÒ⣺ÕâÊÇÈκÎʱºò¶¼²»ÄܱÜÃâµÄ£©£¬ÕâÑùºÜºÃµÄ·ûºÏÁË¿ª·Å·â±ÕÔÔò¡£
ASP.NET HTTPͨµÀÖеÄÓ¦ÓÃ
Factory MethodģʽÔÚASP.NET HTTPͨµÀÖÐÎÒÃÇ¿ÉÒÔÕÒµ½ºÜ¶àµÄÀý×Ó¡£ASP.NET
HTTPͨµÀÊÇSystem.WebÃüÃû¿Õ¼äϵÄÒ»¸öÀ࣬WEB ServerʹÓøÃÀà´¦Àí½ÓÊÕµ½µÄHTTPÇëÇ󣬲¢¸ø¿Í»§¶Ë·¢ËÍÏìÓ¦¡£HTTPͨµÀÖ÷ÒªµÄ¹¤×÷ÓÐSession¹ÜÀí£¬Ó¦ÓóÌÐò³Ø¹ÜÀí£¬»º´æ¹ÜÀí£¬°²È«µÈ¡£
System.Web.HttpApplicationFactory
HttpRuntimeÊÇHTTPͨµÀµÄÈë¿Úµã£¬Ëü¸ù¾Ýÿһ¸ö¾ßÌåµÄÇëÇó´´½¨Ò»¸öHttpContextʵÀý£¬
HttpRuntime²¢Ã»ÓÐÈ·¶¨Ëü½«Òª´¦ÀíÇëÇóµÄHttpApplication¶ÔÏóµÄÀàÐÍ£¬Ëüµ÷ÓÃÁËÒ»¸ö¾²Ì¬µÄ¹¤³§·½·¨HttpApplicationFactory.GetApplicationInstance£¬Í¨¹ýËüÀ´´´½¨HttpContextʵÀý¡£GetApplicationInstanceʹÓÃHttpContextʵÀýÀ´È·¶¨Õë¶ÔÕâ¸öÇëÇó¸ÃÏìÓ¦ÄĸöÐéÄâ·¾¶£¬Èç¹ûÕâ¸öÐéÄâ·¾¶ÒÔǰÇëÇó¹ý£¬HttpApplication£¨»òÕßÒ»¸ö¼Ì³ÐÓÚASP.Global_asaxµÄÀàµÄʵÀý£©½«Ö±½Ó´ÓÓ¦ÓóÌÐò³ØÖзµ»Ø£¬·ñÔòÕë¶Ô¸ÃÐéÄâ·¾¶½«´´½¨Ò»¸öеÄHttpApplication¶ÔÏó²¢·µ»Ø¡£ÈçÏÂͼËùʾ£º

HttpApplicationFactory.GetApplicationInstance´øÓÐÒ»¸öÀàÐÍΪHttpContextµÄ²ÎÊý£¬´´½¨µÄËùÓжÔÏ󣨲úÆ·£©¶¼ÊÇHttpApplicationµÄÀàÐÍ£¬Í¨¹ý·´±àÒ룬À´¿´Ò»ÏÂGetApplicationInstanceµÄʵÏÖ£º
internal static IHttpHandler GetApplicationInstance(HttpContext context) 2{ 3 if (HttpApplicationFactory._customApplication != null) 4 { 5 return HttpApplicationFactory._customApplication; 6 } 7 if (HttpDebugHandler.IsDebuggingRequest(context)) 8 { 9 return new HttpDebugHandler(); 10 } 11 if (!HttpApplicationFactory._theApplicationFactory._inited) 12 { 13 lock (HttpApplicationFactory._theApplicationFactory) 14 { 15 if (!HttpApplicationFactory._theApplicationFactory._inited) 16 { 17 HttpApplicationFactory._theApplicationFactory.Init(context); 18 HttpApplicationFactory._theApplicationFactory._inited = true; 19 } 20 } 21 } 22 return HttpApplicationFactory._theApplicationFactory.GetNormalApplicationInstance(context); 23} |
System.Web.IHttpHandlerFactory
ÎÒÃÇÀ´×ö½øÒ»²½µÄ̽Ë÷£¬HttpApplicationʵÀýÐèÒªÒ»¸öHandler¶ÔÏóÀ´´¦Àí×ÊÔ´ÇëÇó£¬ HttpApplicationµÄÖ÷ÒªÈÎÎñ¾ÍÊÇÕÒµ½ÕæÕý´¦ÀíÇëÇóµÄÀà¡£HttpApplicationÊ×ÏÈÈ·¶¨ÁËÒ»¸ö´´½¨Handler¶ÔÏóµÄ¹¤³§£¬À´¿´Ò»ÏÂÔÚMachine.configÎļþÖеÄÅäÖÃÇø<httphandlers>£¬ÔÚÅäÖÃÎļþ×¢²áÁËÓ¦ÓóÌÐòµÄ¾ßÌå´¦ÀíÀà¡£ÀýÈçÔÚMachine.configÖжÔ*.aspxµÄ´¦Àí½«Ó³Éäµ½System.Web.UI.PageHandlerFactory
À࣬¶ø¶Ô*.ashxµÄ´¦Àí½«Ó³Éäµ½System.Web.UI.SimpleHandlerFactory
À࣬ÕâÁ½¸öÀà¶¼ÊǼ̳ÐÓÚIhttpHandlerFactory½Ó¿ÚµÄ¾ßÌåÀࣺ
<httpHandlers>
<add verb="*" path="*.aspx"
type="System.Web.UI.PageHandlerFactory"
/>
<add verb="*" path="*.ashx"
type="System.Web.UI.SimpleHandlerFactory"
/>
</httpHandlers> |
Õâ¸öÅäÖÃÇø½¨Á¢ÁË×ÊÔ´ÇëÇóµÄÀàÐͺʹ¦ÀíÇëÇóµÄÀàÖ®¼äµÄÒ»¸öÓ³É伯¡£Èç¹ûÒ»¸ö.aspxÒ³Ãæ·¢³öÁËÇëÇ󣬽«»áµ÷ÓÃSystem.Web.UI.PageHandlerFactoryÀ࣬HttpApplicationµ÷ÓýӿÚIHttpHandlerFactoryÖеŤ³§·½·¨GetHandlerÀ´´´½¨Ò»¸öHandler¶ÔÏó¡£µ±Ò»¸öÃûΪsample.aspxµÄÒ³Ãæ·¢³öÇëÇóʱ£¬Í¨¹ýPageHandlerFactory½«·µ»ØÒ»¸öASP.SamplePage_aspx¶ÔÏ󣨾ßÌå²úÆ·£©£¬ÈçÏÂͼ£º

IHttpHandlerFactory¹¤³§£º
public interface IHttpHandlerFactory 2{ 3 // Methods 4 IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated); 5 void ReleaseHandler(IHttpHandler handler); 6} |
IHttpHandlerFactory.GetHandlerÊÇÒ»¸ö¹¤³§·½·¨Ä£Ê½µÄµäÐÍÀý×Ó£¬ÔÚÕâ¸öÓ¦ÓÃÖУ¬¸÷¸ö½ÇÉ«µÄÉèÖÃÈçÏ£º
³éÏ󹤳§½ÇÉ«£ºIHttpHandlerFactory
¾ßÌ幤³§½ÇÉ«£ºPageHandlerFactory
³éÏó²úÆ·½ÇÉ«£ºIHttpHandler
¾ßÌå²úÆ·½ÇÉ«£ºASP.SamplePage_aspx
½øÒ»²½È¥Àí½â
Àí½âÉÏÃæËù˵µÄÖ®ºó£¬ÎÒÃǾͿÉÒÔÈ¥×Ô¶¨Ò幤³§ÀàÀ´¶ÔÌØ¶¨µÄ×ÊÔ´ÀàÐͽøÐд¦Àí¡£µÚÒ»²½ÎÒÃÇÐèÒª´´½¨Á½¸öÀàÈ¥·Ö±ðʵÏÖIHttpHandlerFactory
ºÍIHttpHandlerÕâÁ½¸ö½Ó¿Ú¡£
public class HttpHandlerFactoryImpl:IHttpHandlerFactory { 2 3 IHttpHandler IHttpHandlerFactory.GetHandler( 4 HttpContext context, String requestType, 5 String url, String pathTranslated ) { 6 7 return new HttpHandlerImpl(); 8 9 }//IHttpHandlerFactory.GetHandler 10 11 void IHttpHandlerFactory.ReleaseHandler( 12 IHttpHandler handler) { /*no-op*/ } 13 14}//HttpHandlerFactoryImpl 15 16public class HttpHandlerImpl:IHttpHandler { 17 18 void IHttpHandler.ProcessRequest(HttpContext context) { 19 20 context.Response.Write("sample handler invoked"); 21 22 }//ProcessRequest 23 24 bool IHttpHandler.IsReusable { get { return false; } } 25 26}//HttpHandlerImpl |
µÚ¶þ²½ÐèÒªÔÚÅäÖÃÎļþÖн¨Á¢×ÊÔ´ÇëÇóÀàÐͺʹ¦Àí³ÌÐòÖ®¼äµÄÓ³Éä¡£ÎÒÃÇÏ£Íûµ±ÇëÇóµÄÀàÐÍΪ*.sampleʱ½øÈëÎÒÃÇ×Ô¶¨ÒåµÄ´¦Àí³ÌÐò£¬ÈçÏ£º
<httpHandlers>
<add verb="*" path="*.sample"
type="HttpHandlerFactoryImpl,SampleHandler"
/>
</httpHandlers> |
×îºóÒ»²½ÎÒÃÇÐèÒª°ÑÎļþÀ©Õ¹*.sampleÓ³Éäµ½ASP.NET ISAPIÀ©Õ¹DLL£¨aspnet_isapi.dll£©ÉÏ¡£ÓÉÓÚÎÒÃÇÒѾ½¨Á¢ÁËÓÃÓÚ´¦ÀíÐÂÀ©Õ¹ÎļþµÄ´¦Àí³ÌÐòÁË£¬ÎÒÃÇ»¹ÐèÒª°ÑÕâ¸öÀ©Õ¹Ãû¸æËßIIS²¢°ÑËüÓ³Éäµ½ASP.NET¡£Èç¹ûÄã²»Ö´ÐÐÕâ¸ö²½Öè¶øÊÔͼ·ÃÎÊ*.sampleÎļþ£¬IIS½«¼òµ¥µØ·µ»Ø¸ÃÎļþ¶ø²»ÊǰÑËü´«µÝ¸øASP.NETÔËÐÐʱ¡£Æä½á¹ûÊǸÃHTTP´¦Àí³ÌÐò²»»á±»µ÷Óá£
ÔËÐÐInternet·þÎñ¹ÜÀíÆ÷£¬ÓÒ¼üµã»÷ĬÈÏWebÕ¾µã£¬Ñ¡ÔñÊôÐÔ£¬Òƶ¯µ½Ö÷Ŀ¼ѡÏîÒ³£¬²¢µã»÷ÅäÖð´Å¥¡£Ó¦ÓóÌÐòÅäÖöԻ°¿òµ¯³öÀ´ÁË¡£µã»÷Ìí¼Ó°´Å¥²¢ÔÚ¿ÉÖ´ÐÐ×Ö¶ÎÊäÈëaspnet_isapi.dllÎļþ·¾¶£¬ÔÚÀ©Õ¹×Ö¶ÎÊäÈë.sample¡£ÆäËü×ֶβ»Óô¦Àí£»¸Ã¶Ô»°¿òÈçÏÂËùʾ£º

ÔÚ.NET FrameworkÖУ¬¹ØÓÚ¹¤³§Ä£Ê½µÄʹÓÃÓкܶàµÄÀý×Ó£¬ÀýÈçIEnumerableºÍIEnumerator¾ÍÊÇÒ»¸öCreatorºÍÒ»¸öProduct£»System.Security.CryptographyÖйØÓÚ¼ÓÃÜËã·¨µÄÑ¡Ôñ£¬SymmetricAlgorithm,
AsymmetricAlgorithm, ºÍHashAlgorithm·Ö±ðÊÇÈý¸ö¹¤³§£¬ËûÃǸ÷ÓÐÒ»¸ö¾²Ì¬µÄ¹¤³§·½·¨Create£»System.Net.WebRequestÊÇ
.NET Framework µÄÓÃÓÚ·ÃÎÊ Internet Êý¾ÝµÄÇëÇó/ÏìӦģÐ͵ijéÏó»ùÀࡣʹÓøÃÇëÇó/ÏìӦģÐ͵ÄÓ¦ÓóÌÐò¿ÉÒÔÓÃÐÒé²»¿ÉÖªµÄ·½Ê½´Ó
Internet ÇëÇóÊý¾Ý¡£ÔÚÕâÖÖ·½Ê½Ï£¬Ó¦ÓóÌÐò´¦Àí WebRequest ÀàµÄʵÀý£¬¶øÐÒéÌØ¶¨µÄ×ÓÀàÔòÖ´ÐÐÇëÇóµÄ¾ßÌåϸ½Ú¡£ÇëÇó´ÓÓ¦ÓóÌÐò·¢Ë͵½Ä³¸öÌØ¶¨µÄ
URI£¬Èç·þÎñÆ÷É쵀 Web Ò³¡£URI ´ÓÒ»¸öΪӦÓóÌÐò×¢²áµÄ WebRequest ×Ó´úÁбíÖÐÈ·¶¨Òª´´½¨µÄÊʵ±×ÓÀà¡£×¢²á
WebRequest ×Ó´úͨ³£ÊÇΪÁË´¦Àíij¸öÌØ¶¨µÄÐÒ飨Èç HTTP »ò FTP£©£¬µ«ÊÇÒ²¿ÉÒÔ×¢²áËüÒÔ´¦Àí¶ÔÌØ¶¨·þÎñÆ÷»ò·þÎñÆ÷ÉϵÄ·¾¶µÄÇëÇó¡£ÓÐʱ¼äÎÒ»á¾Í.NET
FrameworkÖй¤³§Ä£Ê½µÄʹÓÃ×÷Ò»¸öרÌâ×ܽᡣ
ʵÏÖÒªµã
1£® Factory MethodģʽµÄÁ½ÖÖÇé¿ö£ºÒ»ÊÇCreatorÀàÊÇÒ»¸ö³éÏóÀàÇÒËü²»ÌṩËüËùÉùÃ÷µÄ¹¤³§·½·¨µÄʵÏÖ£»¶þÊÇCreatorÊÇÒ»¸ö¾ßÌåµÄÀàÇÒËüÌṩһ¸ö¹¤³§·½·¨µÄȱʡʵÏÖ¡£
2£® ¹¤³§·½·¨ÊÇ¿ÉÒÔ´ø²ÎÊýµÄ¡£
3£® ¹¤³§µÄ×÷Óò¢²»½ö½öÖ»ÊÇ´´½¨Ò»¸ö¶ÔÏó£¬Ëü»¹¿ÉÒÔ×ö¶ÔÏóµÄ³õʼ»¯£¬²ÎÊýµÄÉèÖõȡ£
Ч¹û
1£® Óù¤³§·½·¨ÔÚÒ»¸öÀàµÄÄÚ²¿´´½¨¶ÔÏóͨ³£±ÈÖ±½Ó´´½¨¶ÔÏó¸üÁé»î¡£
2£® Factory Methodģʽͨ¹ýÃæÏò¶ÔÏóµÄÊÖ·¨£¬½«ËùÒª´´½¨µÄ¾ßÌå¶ÔÏóµÄ´´½¨¹¤×÷ÑÓ³Ùµ½ÁË×ÓÀ࣬´Ó¶øÌṩÁËÒ»ÖÖÀ©Õ¹µÄ²ßÂÔ£¬½ÏºÃµÄ½â¾öÁËÕâÖÖ½ôñîºÏµÄ¹ØÏµ¡£
ÊÊÓÃÐÔ
ÔÚÒÔÏÂÇé¿öÏ£¬ÊÊÓÃÓÚ¹¤³§·½·¨Ä£Ê½£º
1. µ±Ò»¸öÀ಻֪µÀËüËù±ØÐë´´½¨µÄ¶ÔÏóµÄÀàµÄʱºò¡£
2. µ±Ò»¸öÀàÏ£ÍûÓÉËüµÄ×ÓÀàÀ´Ö¸¶¨ËüËù´´½¨µÄ¶ÔÏóµÄʱºò¡£
3. µ±Àཫ´´½¨¶ÔÏóµÄÖ°ÔðίÍиø¶à¸ö°ïÖú×ÓÀàÖеÄijһ¸ö£¬²¢ÇÒÄãÏ£Íû½«ÄÄÒ»¸ö°ïÖú×ÓÀàÊÇ´úÀíÕßÕâÒ»ÐÅÏ¢¾Ö²¿»¯µÄʱºò¡£
×ܽá
Factory MethodģʽÊÇÉè¼ÆÄ£Ê½ÖÐÓ¦ÓÃ×îΪ¹ã·ºµÄģʽ£¬Í¨¹ý±¾ÎÄ£¬ÏàÐŶÁÕßÒѾ¶ÔËüÓÐÁËÒ»¶¨µÄÈÏʶ¡£È»¶øÎÒÃÇÒªÃ÷È·µÄÊÇ£ºÔÚÃæÏò¶ÔÏóµÄ±à³ÌÖУ¬¶ÔÏóµÄ´´½¨¹¤×÷·Ç³£¼òµ¥£¬¶ÔÏóµÄ´´½¨Ê±»úÈ´ºÜÖØÒª¡£Factory
MethodÒª½â¾öµÄ¾ÍÊǶÔÏóµÄ´´½¨Ê±»úÎÊÌ⣬ËüÌṩÁËÒ»ÖÖÀ©Õ¹µÄ²ßÂÔ£¬ºÜºÃµØ·ûºÏÁË¿ª·Å·â±ÕÔÔò¡£ |