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

1Ôª 10Ôª 50Ôª





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



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

ÕªÒª£ºÔÚÈí¼þϵͳÖУ¬ÓÐЩ¶ÔÏóÓÐʱºòÓÉÓÚ¿çÔ½ÍøÂç»òÕ߯äËûµÄÕϰ­£¬¶ø²»Äܹ»»òÕß²»ÏëÖ±½Ó·ÃÎÊÁíÒ»¸ö¶ÔÏó£¬Èç¹ûÖ±½Ó·ÃÎÊ»á¸øÏµÍ³´øÀ´²»±ØÒªµÄ¸´ÔÓÐÔ£¬Õâʱºò¿ÉÒÔÔÚ¿Í»§³ÌÐòºÍÄ¿±ê¶ÔÏóÖ®¼äÔö¼ÓÒ»²ãÖмä²ã£¬ÈôúÀí¶ÔÏóÀ´´úÌæÄ¿±ê¶ÔÏó´òµãÒ»ÇС£Õâ¾ÍÊDZ¾ÎÄҪ˵µÄProxyģʽ¡£

¸ÅÊö

ÔÚÈí¼þϵͳÖУ¬ÓÐЩ¶ÔÏóÓÐʱºòÓÉÓÚ¿çÔ½ÍøÂç»òÕ߯äËûµÄÕϰ­£¬¶ø²»Äܹ»»òÕß²»ÏëÖ±½Ó·ÃÎÊÁíÒ»¸ö¶ÔÏó£¬Èç¹ûÖ±½Ó·ÃÎÊ»á¸øÏµÍ³´øÀ´²»±ØÒªµÄ¸´ÔÓÐÔ£¬Õâʱºò¿ÉÒÔÔÚ¿Í»§³ÌÐòºÍÄ¿±ê¶ÔÏóÖ®¼äÔö¼ÓÒ»²ãÖмä²ã£¬ÈôúÀí¶ÔÏóÀ´´úÌæÄ¿±ê¶ÔÏó´òµãÒ»ÇС£Õâ¾ÍÊDZ¾ÎÄҪ˵µÄProxyģʽ¡£

Òâͼ

ΪÆäËû¶ÔÏóÌṩһÖÖ´úÀíÒÔ¿ØÖƶÔÕâ¸ö¶ÔÏóµÄ·ÃÎÊ¡£

½á¹¹Í¼

ͼ1 Proxyģʽ½á¹¹Í¼

Éú»îÖеÄÀý×Ó

´úÀíģʽÌṩһ¸öÖнéÒÔ¿ØÖƶÔÕâ¸ö¶ÔÏóµÄ·ÃÎÊ¡£Ò»ÕÅ֧Ʊ»òÒøÐд浥ÊÇÕË»§ÖÐ×ʽðµÄ´úÀí¡£Ö§Æ±ÔÚÊг¡½»Ò×ÖÐÓÃÀ´´úÌæÏֽ𣬲¢Ìṩ¶ÔÇ©·¢ÈËÕ˺ÅÉÏ×ʽðµÄ¿ØÖÆ¡£

ͼ2 ʹÓÃÒøÐд浥Àý×ÓµÄProxyģʽ¶ÔÏóͼ

Proxyģʽ½â˵

ÔÚÈí¼þϵͳÖУ¬ÎÒÃÇÎÞʱ²»ÔÚ¿çÔ½Õϰ­£¬µ±ÎÒÃÇ·ÃÎÊÍøÂçÉÏһ̨¼ÆËã»úµÄ×ÊԴʱ£¬ÎÒÃÇÕýÔÚ¿çÔ½ÍøÂçÕϰ­£¬µ±ÎÒÃÇÈ¥·ÃÎÊ·þÎñÆ÷ÉÏÊý¾Ý¿âʱ£¬ÎÒÃÇÓÖÔÚ¿çÔ½Êý¾Ý¿â·ÃÎÊÕϰ­£¬Í¬Ê±»¹ÓÐÍøÂçÕϰ­¡£¿çÔ½ÕâЩÕϰ­ÓÐʱºòÊǷdz£¸´Ôӵģ¬Èç¹ûÎÒÃǸü¶àµÄÈ¥¹Ø×¢´¦ÀíÕâЩÕϰ­ÎÊÌ⣬¿ÉÄܾͻáºöÊÓÁ˱¾À´Ó¦¸Ã¹Ø×¢µÄÒµÎñÂß¼­ÎÊÌ⣬ProxyģʽÓÐÖúÓÚÎÒÃÇÈ¥½â¾öÕâЩÎÊÌâ¡£ÎÒÃÇÒÔÒ»¸ö¼òµ¥µÄÊýѧ¼ÆËã³ÌÐòΪÀý£¬Õâ¸ö³ÌÐòÖ»¸ºÔð½øÐмòµ¥µÄ¼Ó¼õ³Ë³ýÔËË㣺

public class Math
{
public double Add(double x,double y)
{
return x + y;
}

public double Sub(double x,double y)
{
return x - y;
}

public double Mul(double x,double y)
{
return x * y;
}

public double Dev(double x,double y)
{
return x / y;
}
}

Èç¹û˵Õâ¸ö¼ÆËã³ÌÐò²¿ÊðÔÚÎÒÃDZ¾µØ¼ÆËã»úÉÏ£¬Ê¹Óþͷdz£Ö®¼òµ¥ÁË£¬ÎÒÃÇÒ²¾Í²»ÓÃÈ¥¿¼ÂÇProxyģʽÁË¡£µ«ÏÖÔÚÎÊÌâÊÇÕâ¸öMathÀಢûÓв¿ÊðÔÚÎÒÃDZ¾µØ£¬¶øÊDz¿ÊðÔÚһ̨·þÎñÆ÷ÉÏ£¬Ò²¾ÍÊÇ˵MathÀà¸ù±¾ºÍÎÒÃǵĿͻ§³ÌÐò²»ÔÚͬһ¸öµØÖ·¿Õ¼äÖ®ÄÚ£¬ÎÒÃÇÏÖÔÚÒªÃæ¶ÔµÄÊÇ¿çÔ½InternetÕâÑùÒ»¸öÍøÂçÕϰ­£º

ͼ3

Õâʱºòµ÷ÓÃMathÀàµÄ·½·¨¾ÍûÓÐÏÂÃæÄÇô¼òµ¥ÁË£¬ÒòΪÎÒÃǸü¶àµÄ»¹ÒªÈ¥¿¼ÂÇÍøÂçµÄÎÊÌ⣬¶Ô½ÓÊÕµ½µÄ½á¹û½â°üµÈһϵÁвÙ×÷¡£

public class App
{
public static void Main()
{
Math math = new Math();

// ¶Ô½ÓÊÕµ½µÄ½á¹ûÊý¾Ý½øÐнâ°ü

double addresult = math.Add(2,3);

double subresult = math.Sub(2,3);

double mulresult = math.Mul(2,3);

double devresult = math.Dev(2,3);
}
}

ΪÁ˽â¾öÓÉÓÚÍøÂçµÈÕϰ­ÒýÆð¸´ÔÓÐÔ£¬¾ÍÒý³öÁËProxyģʽ£¬ÎÒÃÇʹÓÃÒ»¸ö±¾µØµÄ´úÀíÀ´ÌæMathÀà´òµãÒ»ÇУ¬¼´ÎªÎÒÃǵÄϵͳÒýÈëÁËÒ»²ã¼ä½Ó²ã£¬Ê¾ÒâͼÈçÏÂ

ͼ4

ÎÒÃÇÔÚMathProxyÖжÔʵÏÖMathÊý¾ÝÀàµÄ·ÃÎÊ£¬ÈÃMathProxyÀ´´úÌæÍøÂçÉϵÄMathÀ࣬ÕâÑùÎÒÃÇ¿´µ½MathProxy¾ÍºÃÏñÊDZ¾µØMathÀ࣬ËüÓë¿Í»§³ÌÐò´¦ÔÚÁËͬһµØÖ·¿Õ¼äÄÚ£º

public class MathProxy
{
private Math math = new Math();

// ÒÔÏµķ½·¨ÖУ¬¿ÉÄܲ»½ö½öÊǼòµ¥µÄµ÷ÓÃMathÀàµÄ·½·¨

public double Add(double x,double y)
{
return math.Add(x,y);
}

public double Sub(double x,double y)
{
return math.Sub(x,y);
}

public double Mul(double x,double y)
{
return math.Mul(x,y);
}

public double Dev(double x,double y)
{
return math.Dev(x,y);
}
}

ÏÖÔÚ¿ÉÒÔ˵ÎÒÃÇÒѾ­ÊµÏÖÁ˶ÔMathÀàµÄ´úÀí£¬´æÔÚµÄÒ»¸öÎÊÌâÊÇÎÒÃÇÔÚMathProxyÀàÖе÷ÓÃÁËԭʵÏÖÀàMathµÄ·½·¨£¬µ«ÊÇMath²¢²»Ò»¶¨ÊµÏÖÁËËùÓеķ½·¨£¬ÎªÁËÇ¿ÆÈMathÀàʵÏÖËùÓеķ½·¨£¬ÁíÒ»·½Ã棬ΪÁËÎÒÃǸü¼Ó͸Ã÷µÄÈ¥²Ù×÷¶ÔÏó£¬ÎÒÃÇÔÚMathÀàºÍMathProxyÀàµÄ»ù´¡ÉϼÓÉÏÒ»²ã³éÏ󣬼´ËüÃǶ¼ÊµÏÖÓëIMath½Ó¿Ú£¬Ê¾ÒâͼÈçÏ£º

ʾÒâÐÔ´úÂëÈçÏ£º

public interface IMath
{
double Add(double x,double y);

double Sub(double x,double y);

double Mul(double x,double y);

double Dev(double x,double y);
}

MathÀàºÍMathProxyÀà·Ö±ðʵÏÖIMath½Ó¿Ú£º

public class MathProxy : IMath
{
//
}

public class Math : IMath
{
//
}

´ËʱÎÒÃÇÔÚ¿Í»§³ÌÐòÖоͿÉÒÔÏñʹÓÃMathÀàÒ»ÑùÀ´Ê¹ÓÃMathProxyÀàÁË£º

public class App
{
public static void Main()
{
MathProxy proxy = new MathProxy();

double addresult = proxy.Add(2,3);

double subresult = proxy.Sub(2,3);

double mulresult = proxy.Mul(2,3);

double devresult = proxy.Dev(2,3);
}
}

µ½Õâ¶ùÕû¸öʹÓÃProxyģʽµÄ¹ý³Ì¾ÍÍê³ÉÁË£¬»Ø¹ËÇ°ÃæÎÒÃǵĽâ¾ö·½°¸£¬ÎÞ·ÇÊÇÔÚ¿Í»§³ÌÐòºÍMathÀàÖ®¼ä¼ÓÁËÒ»¸ö¼ä½Ó²ã£¬ÕâÒ²ÊÇÎÒÃDZȽϳ£¼ûµÄ½â¾öÎÊÌâµÄÊÖ¶ÎÖ®Ò»¡£ÁíÍ⣬¶ÔÓÚ³ÌÐòÖеĽӿÚImath£¬²¢²»ÊDZØÐëµÄ£¬´ó¶àÊýÇé¿öÏ£¬ÎÒÃÇΪÁ˱£³Ö¶Ô¶ÔÏó²Ù×÷µÄ͸Ã÷ÐÔ£¬²¢Ç¿ÖÆÊµÏÖÀàʵÏÖ´úÀíÀàËùÒªµ÷ÓõÄËùÓеķ½·¨£¬ÎÒÃÇ»áÈÃËüÃÇʵÏÖÓëͬһ¸ö½Ó¿Ú¡£µ«ÊÇÎÒÃÇ˵´úÀíÀàËüÆäʵֻÊÇÔÚÒ»¶¨³Ì¶ÈÉÏ´ú±íÁËÔ­À´µÄʵÏÖÀ࣬ËùÒÔËüÃÇÓÐʱºòÒ²¿ÉÒÔ²»ÊµÏÖÓÚͬһ¸ö½Ó¿Ú¡£

Ч¹û¼°ÊµÏÖÒªµã

Proxyģʽ¸ù¾ÝÖÖÀ಻ͬ£¬Ð§¹ûÒ²²»¾¡Ïàͬ£º

1£®Ô¶³Ì£¨Remote£©´úÀí£ºÎªÒ»¸öλÓÚ²»Í¬µÄµØÖ·¿Õ¼äµÄ¶ÔÏóÌṩһ¸ö¾ÖÓò´ú±í¶ÔÏó¡£Õâ¸ö²»Í¬µÄµØÖ·¿Õ¼ä¿ÉÒÔÊÇÔÚ±¾»úÆ÷ÖУ¬Ò²¿ÉÊÇÔÚÁíһ̨»úÆ÷ÖС£Ô¶³Ì´úÀíÓÖ½Ð×ö´óʹ£¨Ambassador£©¡£ºÃ´¦ÊÇϵͳ¿ÉÒÔ½«ÍøÂçµÄϸ½ÚÒþ²ØÆðÀ´£¬Ê¹µÃ¿Í»§¶Ë²»±Ø¿¼ÂÇÍøÂçµÄ´æÔÚ¡£¿Í»§ÍêÈ«¿ÉÒÔÈÏΪ±»´úÀíµÄ¶ÔÏóÊǾÖÓòµÄ¶ø²»ÊÇÔ¶³ÌµÄ£¬¶ø´úÀí¶ÔÏó³Ðµ£Á˴󲿷ݵÄÍøÂçͨѶ¹¤×÷¡£ÓÉÓÚ¿Í»§¿ÉÄÜûÓÐÒâʶµ½»áÆô¶¯Ò»¸öºÄ·Ñʱ¼äµÄÔ¶³Ìµ÷Óã¬Òò´Ë¿Í»§Ã»ÓбØÒªµÄ˼Ïë×¼±¸¡£

2£®ÐéÄ⣨Virtual£©´úÀí£º¸ù¾ÝÐèÒª´´½¨Ò»¸ö×ÊÔ´ÏûºÄ½Ï´óµÄ¶ÔÏó£¬Ê¹µÃ´Ë¶ÔÏóÖ»ÔÚÐèҪʱ²Å»á±»ÕæÕý´´½¨¡£Ê¹ÓÃÐéÄâ´úÀíģʽµÄºÃ´¦¾ÍÊÇ´úÀí¶ÔÏó¿ÉÒÔÔÚ±ØÒªµÄʱºò²Å½«±»´úÀíµÄ¶ÔÏó¼ÓÔØ£»´úÀí¿ÉÒÔ¶Ô¼ÓÔØµÄ¹ý³Ì¼ÓÒÔ±ØÒªµÄÓÅ»¯¡£µ±Ò»¸öÄ£¿éµÄ¼ÓÔØÊ®·ÖºÄ·Ñ×ÊÔ´µÄÇé¿öÏ£¬ÐéÄâ´úÀíµÄºÃ´¦¾Í·Ç³£Ã÷ÏÔ¡£

3£®Copy-on-Write´úÀí£ºÐéÄâ´úÀíµÄÒ»ÖÖ¡£°Ñ¸´ÖÆ£¨¿Ë¡£©ÍÏÑÓµ½Ö»ÓÐÔÚ¿Í»§¶ËÐèҪʱ£¬²ÅÕæÕý²ÉÈ¡Ðж¯¡£

4£®±£»¤£¨Protect or Access£©´úÀí£º¿ØÖƶÔÒ»¸ö¶ÔÏóµÄ·ÃÎÊ£¬Èç¹ûÐèÒª£¬¿ÉÒÔ¸ø²»Í¬µÄÓû§Ìṩ²»Í¬¼¶±ðµÄʹÓÃȨÏÞ¡£±£»¤´úÀíµÄºÃ´¦ÊÇËü¿ÉÒÔÔÚÔËÐÐʱ¼ä¶ÔÓû§µÄÓйØÈ¨ÏÞ½øÐмì²é£¬È»ºóÔÚºËʵºó¾ö¶¨½«µ÷Óô«µÝ¸ø±»´úÀíµÄ¶ÔÏó¡£

5£®Cache´úÀí£ºÎªÄ³Ò»¸öÄ¿±ê²Ù×÷µÄ½á¹ûÌṩÁÙʱµÄ´æ´¢¿Õ¼ä£¬ÒÔ±ã¶à¸ö¿Í»§¶Ë¿ÉÒÔ¹²ÏíÕâЩ½á¹û¡£

6£®·À»ðǽ£¨Firewall£©´úÀí£º±£»¤Ä¿±ê£¬²»ÈöñÒâÓû§½Ó½ü¡£

7£®Í¬²½»¯£¨Synchronization£©´úÀí£ºÊ¹¼¸¸öÓû§Äܹ»Í¬Ê±Ê¹ÓÃÒ»¸ö¶ÔÏó¶øÃ»ÓгåÍ»¡£

8£®ÖÇÄÜÒýÓã¨Smart Reference£©´úÀí£ºµ±Ò»¸ö¶ÔÏó±»ÒýÓÃʱ£¬ÌṩһЩ¶îÍâµÄ²Ù×÷£¬±ÈÈ罫¶Ô´Ë¶ÔÏóµ÷ÓõĴÎÊý¼Ç¼ÏÂÀ´µÈ¡£

×ܽá

ÔÚÈí¼þϵͳÖУ¬Ôö¼ÓÒ»¸öÖмä²ãÊÇÎÒÃǽâ¾öÎÊÌâµÄ³£¼ûÊÖ·¨£¬Õâ·½ÃæProxyģʽ¸øÁËÎÒÃǺܺõÄʵÏÖ¡£

   
2635 ´Îä¯ÀÀ       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
Öдïµçͨ Éè¼ÆÄ£Ê½Ô­Àí
Î÷ÃÅ×Ó Ç¶ÈëʽÉè¼ÆÄ£Ê½
 
 
 
¡¡