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