Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
.NETÉè¼ÆÄ£Ê½£¨5£©£º¹¤³§·½·¨Ä£Ê½£¨Factory Method£©
 
×÷Õß Àî»á¾ü£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-09-12
  2567  次浏览      28
 

¸ÅÊö

ÔÚÈí¼þϵͳÖУ¬¾­³£ÃæÁÙ×Å¡°Ä³¸ö¶ÔÏ󡱵Ĵ´½¨¹¤×÷£¬ÓÉÓÚÐèÇóµÄ±ä»¯£¬Õâ¸ö¶ÔÏóµÄ¾ßÌåʵÏÖ¾­³£ÃæÁÙמçÁҵı仯£¬µ«ÊÇËüÈ´ÓµÓбȽÏÎȶ¨µÄ½Ó¿Ú¡£ÈçºÎÓ¦¶ÔÕâÖֱ仯£¿ÌṩһÖÖ·â×°»úÖÆÀ´¸ôÀë³ö¡°Õâ¸öÒ×±ä¶ÔÏ󡱵ı仯£¬´Ó¶ø±£³ÖϵͳÖС°ÆäËüÒÀÀµ¸Ã¶ÔÏóµÄ¶ÔÏó¡±²»Ëæ×ÅÐèÇóµÄ¸Ä±ä¶ø¸Ä±ä£¿Õâ¾ÍÊÇҪ˵µÄ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Òª½â¾öµÄ¾ÍÊǶÔÏóµÄ´´½¨Ê±»úÎÊÌ⣬ËüÌṩÁËÒ»ÖÖÀ©Õ¹µÄ²ßÂÔ£¬ºÜºÃµØ·ûºÏÁË¿ª·Å·â±ÕÔ­Ôò¡£

   
2567 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

ΪʲôҪ×ö³ÖÐø²¿Êð£¿
ÆÊÎö¡°³ÖÐø½»¸¶¡±£ºÎå¸öºËÐÄʵ¼ù
¼¯³ÉÓë¹¹½¨Ö¸ÄÏ
³ÖÐø¼¯³É¹¤¾ßµÄÑ¡Ôñ-×°ÔØ
 
Ïà¹ØÎĵµ

³ÖÐø¼¯³É½éÉÜ
ʹÓÃHudson³ÖÐø¼¯³É
³ÖÐø¼¯³ÉÖ®-ÒÀÀµ¹ÜÀí
IPD¼¯³É²úÆ·¿ª·¢¹ÜÀí
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀí¡¢ÈÕ¹¹½¨Óë³ÖÐø¼¯³É
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
»ùÓÚAndroidµÄµ¥Ôª¡¢ÐÔÄܲâÊÔ
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]

ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
Visitor Parttern
ÓÉ±í¼°À￴ģʽ
Éè¼ÆÄ£Ê½Ëæ±ÊϵÁÐ
ÉîÈëdz³öÉè¼ÆÄ£Ê½-½éÉÜ
.NETÖеÄÉè¼ÆÄ£Ê½

Ïà¹ØÅàѵ¿Î³Ì

J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Ó¦ÓÃģʽÉè¼ÆJavaÆóÒµ¼¶Ó¦ÓÃ
Éè¼ÆÄ£Ê½Ô­ÀíÓëÓ¦ÓÃ
J2EEÉè¼ÆÄ£Ê½Ö¸ÄÏ
µ¥Ôª²âÊÔ+ÖØ¹¹+Éè¼ÆÄ£Ê½
Éè¼ÆÄ£Ê½¼°ÆäCSharpʵÏÖ


ijµçÁ¦¹«Ë¾ Éè¼ÆÄ£Ê½Ô­Àí
À¶ÍØÆË Éè¼ÆÄ£Ê½Ô­Àí¼°Ó¦ÓÃ
ÎÀÐǵ¼º½ UML & OOAD
ÌÀɭ·͸Ñз¢ÖÐÐÄ UML& OOAD
Öдïµçͨ Éè¼ÆÄ£Ê½Ô­Àí
Î÷ÃÅ×Ó Ç¶ÈëʽÉè¼ÆÄ£Ê½
 
 
 
¡¡