1ÒýÑÔ
ÎÒÃÇÊéдִÐÐÒ»¸ö¹¦Äܵĺ¯Êýʱ£¬¾³£ÐèÒªÔÚÆäÖÐдÈëÓ빦Äܲ»ÊÇÖ±½ÓÏà¹Øµ«ºÜÓбØÒªµÄ´ú Â룬ÈçÈÕÖ¾¼Ç¼£¬ÐÅÏ¢·¢ËÍ£¬°²È«ºÍÊÂÎñÖ§³ÖµÈ£¬ÕâЩ֦½ÚÐÔ´úÂëËäÈ»ÊDZØÒªµÄ£¬µ«Ëü»á´ø
À´ÒÔÏÂÂé·³£º
Ö¦½ÚÐÔ´úÂëÓÎÀëÔÚ¹¦ÄÜÐÔ´úÂëÖ®Í⣬ËüÏÂÊǺ¯ÊýµÄÄ¿µÄ£¬ÕâÊǶÔOOÊÇÒ»ÖÖÆÆ»µ
Ö¦½ÚÐÔ´úÂë»áÔì³É¹¦ÄÜÐÔ´úÂë¶ÔÆäËüÀàµÄÒÀÀµ£¬¼ÓÉîÀàÖ®¼äµÄñîºÏ£¬¶øÕâÊÇOOϵͳËù½ß Á¦±ÜÃâµÄ
Ö¦½ÚÐÔ´úÂë´øÀ´µÄñîºÏ¶È»áÔì³É¹¦ÄÜÐÔ´úÂëÒÆÖ²À§ÄÑ£¬¿ÉÖØÓÃÐÔ½µµÍ
´Ó·¨ÀíÉÏ˵£¬Ö¦½ÚÐÔ´úÂëÓ¦¸Ã`¼àÊÓ'׏¦ÄÜÐÔ´úÂ룬Ȼºó²ÉÈ¡Ðж¯£¬¶ø²»Êǹ¦ÄÜÐÔ´úÂë `֪ͨ'Ö¦½ÚÐÔ´úÂë²ÉÈ¡Ðж¯£¬ÕâºÃ±ÈÒ÷ÓÎÊ«ÈËÓ¦¸ÃÊÇÖ÷¶¯¼Ç¼ÆïÊ¿µÄ¹¦¼¨¶ø²»ÊÇÆïÊ¿Ö÷
¶¯ÒªÇóÊ«È˼Ǽ×Ô¼ºµÄ¹¦¼¨
2 ³£¼ûµÄ´úÀí
ºÁÎÞÒÉÎÊ£¬Ö¦½ÚÐÔ´úÂëºÍ¹¦ÄÜÐÔ´úÂëÐèÒª·Ö¿ªÀ´²ÅÄܽµµÍñîºÏ³Ì¶È£¬·ûºÏÏÖ´úOOϵͳµÄÒª Çó£¬ÎÒÃÇ¿ÉÒÔʹÓôúÀíģʽÍê³ÉÕâ¸öÒªÇó¡£
´úÀíģʽµÄ×÷ÓÃÊÇ£ºÎªÆäËü¶ÔÏóÌṩһÖÖ´úÀíÒÔ¿ØÖƶÔÕâ¸ö¶ÔÏóµÄ·ÃÎÊ¡£ÔÚijЩÇé¿öÏ£¬Ò» ¸ö¿Í»§²»ÏëÖ±½ÓÒýÓÃÁíÒ»¸ö¶ÔÏ󣬶ø´úÀí¶ÔÏó¿ÉÒÔÔÚ¿Í»§¶ËºÍÄ¿±ê¶ÔÏóÖ®¼äÆðµ½Öнé×÷Óá£
´úÀíģʽһ°ãÉæ¼°µ½Èý¸ö½ÇÉ«£º
³éÏó½ÇÉ«£ºÉùÃ÷ÕæÊµ¶ÔÏóºÍ´úÀí¶ÔÏóµÄ¹²Í¬½Ó¿Ú
´úÀí½ÇÉ«£º´úÀí¶ÔÏóÄÚ²¿°üº¬ÓÐÕæÊµ½ÇÉ«µÄÒýÓ㬴Ӷø¿ÉÒÔ²Ù×÷ÕæÊµ½ÇÉ«£¬Í¬Ê±´úÀí¶ÔÏó ÓëÕæÊµ¶ÔÏóÓÐÏàͬµÄ½Ó¿Ú£¬ÄÜÔÚÈκÎʱºò´úÌæÕæÊµ¶ÔÏó£¬Í¬Ê±´úÀí¶ÔÏó¿ÉÒÔÔÚÖ´ÐÐÕæÊµ¶Ô
Ïóǰºó¼ÓÈëÌØ¶¨µÄÂß¼ÒÔʵÏÖ¹¦ÄܵÄÀ©Õ¹¡£
ÕæÊµ½ÇÉ«£º´úÀí½ÇÉ«Ëù´ú±íµÄÕæÊµ¶ÔÏó£¬ÊÇÎÒÃÇ×îÖÕÒªÒýÓõĶÔÏó
³£¼ûµÄ´úÀíÓÐ:
Ô¶³Ì´úÀí(Remote Proxy)£º¶ÔÒ»¸öλÓÚ²»Í¬µÄµØÖ·¿Õ¼ä¶ÔÏóÌṩһ¸ö¾ÖÓò´ú±í¶ÔÏó£¬ÈçRMIÖеÄstub
ÐéÄâ´úÀí(Virtual Proxy)£º¸ù¾ÝÐèÒª½«Ò»¸ö×ÊÔ´ÏûºÄºÜ´ó»òÕ߱Ƚϸ´ÔӵĶÔÏó£¬ÑÓ³Ù¼Ó ÔØ£¬ÔÚÕæÕýÐèÒªµÄʱºò²Å´´½¨
±£»¤´úÀí(Protect or Access Proxy)£º¿ØÖƶÔÒ»¸ö¶ÔÏóµÄ·ÃÎÊȨÏÞ¡£
ÖÇÄÜÒýÓÃ(Smart Reference Proxy)£ºÌṩ±ÈÄ¿±ê¶ÔÏó¶îÍâµÄ·þÎñºÍ¹¦ÄÜ¡£
ͨ¹ý´úÀíÀàÕâÒ»Öмä²ã£¬Äܹ»ÓÐЧ¿ØÖƶÔʵ¼ÊίÍÐÀà¶ÔÏóµÄÖ±½Ó·ÃÎÊ£¬Ò²¿ÉÒԺܺõØÒþ²ØºÍ ±£»¤Êµ¼Ê¶ÔÏó£¬ÊµÊ©²»Í¬µÄ¿ØÖƲßÂÔ£¬´Ó¶øÔÚÉè¼ÆÉÏ»ñµÃÁ˸ü´óµÄÁé»îÐÔ¡£
3 ´úÀíģʽUMLͼ
´úÀíÊÇÒ»ÖÖ³£ÓõÄÉè¼ÆÄ£Ê½£¬ÆäÄ¿µÄ¾ÍÊÇΪÆäËû¶ÔÏóÌṩһ¸ö´úÀíÒÔ¿ØÖƶÔij¸ö¶ÔÏóµÄ·ÃÎÊ¡£ ´úÀíÀฺÔðΪίÍÐÀàÔ¤´¦ÀíÏûÏ¢£¬¹ýÂËÏûÏ¢²¢×ª·¢ÏûÏ¢£¬ÒÔ¼°½øÐÐÏûÏ¢±»Î¯ÍÐÀàÖ´ÐкóµÄºó
Ðø´¦Àí¡£

4 ´úÀíģʽʵÀý
ÒÔÏÂÒÔ¡¶JavaÓëģʽ¡·ÖеÄʾÀýΪÀý£º
// ³éÏó½ÇÉ«£º abstract public class Subject { abstract public void request(); }
// ÕæÊµ½ÇÉ«£ºÊµÏÖÁËSubjectµÄrequest()·½·¨
public class RealSubject extends Subject {
public RealSubject() { }
public void request() {
System.out.println( " From real subject.
" );
}
}
// ´úÀí½ÇÉ«£º
public class ProxySubject extends Subject {
// ÒÔÕæÊµ½ÇÉ«×÷Ϊ´úÀí½ÇÉ«µÄÊôÐÔ
private Subject realSubject;
public ProxySubject(Subject realSubject) {this.realSubject
= realSubject }
// ¸Ã·½·¨·â×°ÁËÕæÊµ¶ÔÏóµÄrequest·½·¨
public void request() {
preRequest();
realSubject.request(); // ´Ë´¦Ö´ÐÐÕæÊµ¶ÔÏóµÄrequest·½·¨
postRequest();
}
...
}
// ¿Í»§¶Ëµ÷Óãº
RealSubject real = new RealSubject();
Subject sub = new ProxySubject(real);
Sub.request(); |
ÓÉÒÔÉÏ´úÂë¿ÉÒÔ¿´³ö£¬¿Í»§Êµ¼ÊÐèÒªµ÷ÓõÄÊÇRealSubjectÀàµÄrequest()·½·¨£¬ÏÖÔÚÓà ProxySubjectÀ´´úÀí
RealSubjectÀ࣬ͬÑù´ïµ½Ä¿µÄ£¬Í¬Ê±»¹·â×°ÁËÆäËû·½·¨ (preRequest(),postRequest())£¬¿ÉÒÔ´¦ÀíһЩÆäËûÎÊÌâ¡£
ÁíÍ⣬Èç¹ûÒª°´ÕÕÉÏÊöµÄ·½·¨Ê¹ÓôúÀíģʽ£¬ÄÇÃ´ÕæÊµ½ÇÉ«±ØÐëÊÇÊÂÏÈÒѾ´æÔڵ쬲¢½«Æä ×÷Ϊ´úÀí¶ÔÏóµÄÄÚ²¿ÊôÐÔ¡£µ«ÊÇʵ¼ÊʹÓÃʱ£¬Èç¹ûijһ¸ö´úÀíÒªÓ¦ÓÃÓÚ£ÅúÕæÊµ½ÇÉ«£¬š°¸ö
ÕæÊµ¶ÔÏó±ØÐë¶ÔÓ¦Ò»¸ö´úÀí½ÇÉ«£¬Èç¹û´óÁ¿Ê¹ÓûᵼÖÂÀàµÄ¼±¾çÅòÕÍ£»´ËÍ⣬Èç¹ûÊÂÏȲ¢²» ÖªµÀÕæÊµ½ÇÉ«£¬¸ÃÈçºÎʹÓñàд´úÀíÀàÄØ£¿Õâ¸öÎÊÌâ¿ÉÒÔͨ¹ýjavaµÄ¶¯Ì¬´úÀíÀàÀ´½â¾ö¡£
5 java¶¯Ì¬´úÀí
ËùνDynamic ProxyÊÇÕâÑùÒ»ÖÖclass£ºËüÊÇÔÚÔËÐÐʱÉú³ÉµÄclass£¬ÔÚÉú³ÉËüʱÄã±ØÐëÌṩһ
×éinterface¸øËü£¬È»ºó¸Ãclass¾ÍÐû³ÆËüʵÏÖÁËÕâЩ interface¡£Ä㵱Ȼ¿ÉÒ԰ѸÃclassµÄʵ
Àýµ±×÷ÕâЩinterfaceÖеÄÈκÎÒ»¸öÀ´Óᣵ±È»À²£¬Õâ¸öDynamic ProxyÆäʵ¾ÍÊÇÒ»¸öProxy£¬
Ëü²»»áÌæÄã×÷ʵÖÊÐԵŤ×÷£¬ÔÚÉú³ÉËüµÄʵÀýʱÄã±ØÐëÌṩһ¸öhandler£¬ÓÉËü½Ó¹Üʵ¼ÊµÄ¹¤ ×÷¡£
5.1 java¶¯Ì¬´úÀíUMLͼ

java¶¯Ì¬´úÀíÀàλÓÚjava.lang.reflect°üÏ£¬Ò»°ãÖ÷񻃾¼°µ½ÒÔÏÂÁ½¸öÀࣺ
Interface InvocationHandler£º¸Ã½Ó¿ÚÖнö¶¨ÒåÁËÒ»¸ö·½·¨Object£ºinvoke(Object
obj,Method method, Object[] args)¡£ÔÚʵ¼ÊʹÓÃʱ£¬µÚÒ»¸ö²ÎÊýobjÒ»°ãÊÇÖ¸´úÀí
À࣬methodÊDZ»´úÀíµÄ·½·¨£¬ÈçÉÏÀýÖеÄrequest()£¬argsΪ¸Ã·½·¨µÄ²ÎÊýÊý×é¡£ Õâ¸ö³é Ïó·½·¨ÔÚ´úÀíÀàÖж¯Ì¬ÊµÏÖ¡£
Proxy£º¸ÃÀ༴Ϊ¶¯Ì¬´úÀíÀ࣬×÷ÓÃÀàËÆÓÚÉÏÀýÖеÄProxySubject¡£
Protected Proxy(InvocationHandler h)£º¹¹Ô캯Êý£¬¹À¼ÆÓÃÓÚ¸øÄÚ²¿µÄh¸³Öµ¡£
Static Class getProxyClass (ClassLoader loader, Class[]
interfaces)£º»ñµÃÒ»¸ö ´úÀíÀ࣬ÆäÖÐloaderÊÇÀà×°ÔØÆ÷£¬interfacesÊÇÕæÊµÀàËùÓµÓеÄÈ«²¿½Ó¿ÚµÄÊý×é¡£
Static Object newProxyInstance(ClassLoader loader, Class[]
interfaces, InvocationHandler h)£º·µ»Ø´úÀíÀàµÄÒ»¸öʵÀý£¬·µ»ØºóµÄ´úÀíÀà¿ÉÒÔµ±×÷±»´úÀíÀàʹÓÃ
(¿ÉʹÓñ»´úÀíÀàµÄÔÚSubject½Ó¿ÚÖÐÉùÃ÷¹ýµÄ·½·¨)¡£
ÔÚʹÓö¯Ì¬´úÀíÀàʱ£¬ÎÒÃDZØÐëʵÏÖInvocationHandler½Ó¿Ú£¬ÒÔµÚÒ»½ÚÖеÄʾÀýΪÀý£º
// ³éÏó½ÇÉ«(֮ǰÊdzéÏóÀ࣬´Ë´¦Ó¦¸ÄΪ½Ó¿Ú)£º public interface Subject { abstract public void request(); }
// ¾ßÌå½ÇÉ«RealSubject£º
public class RealSubject implements Subject {
public RealSubject() {}
public void request() {
System.out.println( " From real subject.
" );
}
}
// ´úÀí´¦ÀíÆ÷£º
import java.lang.reflect.Method;
import java.lang.reflect.InvocationHandler;
public class DynamicSubject implements InvocationHandler
{
private Object sub;
public DynamicSubject() {}
public DynamicSubject(Object obj) {
sub = obj;
}
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
System.out.println( " before calling "
+ method);
method.invoke(sub,args);
System.out.println( " after calling "
+ method);
return null ;
}
} |
¸Ã´úÀíÀàµÄÄÚ²¿ÊôÐÔΪObjectÀ࣬ʵ¼ÊʹÓÃʱͨ¹ý¸ÃÀàµÄ¹¹Ô캯ÊýDynamicSubject(Object
obj)¶ÔÆä¸³Öµ£»´ËÍ⣬ÔÚ¸ÃÀ໹ʵÏÖÁËinvoke·½·¨£¬¸Ã·½·¨ÖеÄ
method.invoke(sub,args);
Æäʵ¾ÍÊǵ÷Óñ»´úÀí¶ÔÏóµÄ½«Òª±»Ö´Ðеķ½·¨£¬·½·¨²ÎÊýsubÊÇʵ¼ÊµÄ±»´úÀí¶ÔÏó£¬argsΪִ Ðб»´úÀí¶ÔÏóÏàÓ¦²Ù×÷ËùÐèµÄ²ÎÊý¡£Í¨¹ý¶¯Ì¬´úÀíÀ࣬ÎÒÃÇ¿ÉÒÔÔÚµ÷ÓÃ֮ǰ»òÖ®ºóÖ´ÐÐһЩ
Ïà¹Ø²Ù×÷¡£
// ¿Í»§¶Ë£º import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; import java.lang.reflect.Constructor; import java.lang.reflect.Method;
public class Client {
static public void main(String[] args) throws
Throwable {
RealSubject rs = new RealSubject(); // ÔÚÕâÀïÖ¸¶¨±»´úÀíÀà
InvocationHandler ds = new DynamicSubject(rs);
Class cls = rs.getClass();
// ÒÔÏÂÊÇÒ»´ÎÐÔÉú³É´úÀí
Subject subject = (Subject) Proxy.newProxyInstance(cls.getClassLoader(),
cls.getInterfaces(),ds );
subject.request();
}
}
// ³ÌÐòÔËÐнá¹û£º
before calling public abstract void Subject.request()
From real subject.
after calling public abstract void Subject.request() |
ͨ¹ýÕâÖÖ·½Ê½£¬±»´úÀíµÄ¶ÔÏó(RealSubject)¿ÉÒÔÔÚÔËÐÐʱ¶¯Ì¬¸Ä±ä£¬ÐèÒª¿ØÖÆµÄ½Ó¿Ú (Subject½Ó¿Ú)¿ÉÒÔÔÚÔËÐÐʱ¸Ä±ä£¬¿ØÖƵķ½Ê½(DynamicSubjectÀà)Ò²¿ÉÒÔ¶¯Ì¬¸Ä±ä£¬´Ó¶øÊµ
ÏÖÁ˷dz£Áé»îµÄ¶¯Ì¬´úÀí¹ØÏµ¡£
6 ´úÀíģʽÓë×°ÊÎÕßģʽµÄÇø±ð
´úÀíģʽºÍ×°ÊÎÕßģʽºÜÏñ£¬ÔÚµäÐ͵ÄÀý×ÓÉÏ£¬ÈçspringµÄAOP¡¢Ô¶³Ì´úÀíÀà¡¢JDKµÄproxy£¬ ¶¼ÊÇ´úÀíģʽ¡£JDKÀïµÄÊäÈë/Êä³öÆ÷ÊǺܵäÐ͵Ä×°ÊÎÆ÷ģʽ£¡µ«ÔÚÓÐЩ³¡¾°ÉÏ£¬¶ÔÉè¼ÆÄ£Ê½
ÈëÃŵÄÐÂÊÖ£¬»¹ÊÇÓеãÄÑÇø·Ö£¬UMLÀàͼ»ù±¾Ã»Çø±ð£¬¶¼ÊÇʵÏÖͬһ¸ö½Ó¿Ú£¬Ò»¸öÀà°ü×°ÁíÒ» ¸öÀà¡£ Á½Õߵ͍Ò壺
×°ÊÎÆ÷ģʽ£ºÄܶ¯Ì¬µÄÐÂÔö»ò×éºÏ¶ÔÏóµÄÐÐΪ
´úÀíģʽ£ºÎªÆäËû¶ÔÏóÌṩһÖÖ´úÀíÒÔ¿ØÖƶÔÕâ¸ö¶ÔÏóµÄ·ÃÎÊ
×°ÊÎģʽÊÇ¡°ÐÂÔöÐÐΪ¡±£¬¶ø´úÀíģʽÊÇ¡°¿ØÖÆ·ÃÎÊ¡±¡£¹Ø¼ü¾ÍÊÇÎÒÃÇÈçºÎÅжÏÊÇ¡°ÐÂÔöÐРΪ¡±»¹ÊÇ¡°¿ØÖÆ·ÃÎÊ¡±¡£ÄãÔÚÒ»¸öµØ·½Ð´×°ÊΣ¬´ó¼Ò¾ÍÖªµÀÕâÊÇÔÚÔö¼Ó¹¦ÄÜ£¬Äãд´úÀí£¬´ó
¼Ò¾ÍÖªµÀÊÇÔÚÏÞÖÆ¡£
6.1 ×°ÊÎÕßģʽUMLͼ

ÆäÖÐÀàµÄÖ°ÔðÈçÏ£º
³éÏó¹¹¼þ½ÇÉ«£¨Project£©£º¸ø³öÒ»¸ö½Ó¿Ú£¬ÒԹ淶׼±¸½ÓÊÕ¸½¼ÓÔðÈεĶÔÏó
¾ßÌå¹¹¼þ½ÇÉ«£¨Employe£©£º¶¨ÒåÒ»¸ö½«Òª½ÓÊÕ¸½¼ÓÔðÈεÄÀà
×°ÊνÇÉ«£¨Manager£©£º³ÖÓÐÒ»¸ö¹¹¼þ¶ÔÏóµÄʵÀý£¬²¢¶¨ÒåÒ»¸öÓë³éÏó¹¹¼þ½Ó¿ÚÒ»ÖµĽӿÚ
¾ßÌå×°ÊνÇÉ«£¨ManagerA¡¢ManagerB£©£º¸ºÔð¸ø¹¹¼þ¶ÔÏó¡°ÌùÉÏ¡±¸½¼ÓµÄÔðÈÎ
6.2 ÐÎÏó˵Ã÷
´úÀíģʽ£ºÔÚ²»¸Ä±ä½Ó¿ÚµÄǰÌáÏ£¬¿ØÖƶÔÏóµÄ·ÃÎÊ
Àý×Ó£ºËïÎò¿Õ°çÑݲ¢´úÌæ¸ß¼ÒÈýС½ã
ËïÎò¿Õ°çÑݸ߼ÒÈýС½ã£¬ËùÒÔ¿ÉÒÔ˵ËïÎò¿ÕÓë¸ß¼ÒÈýС½ã¾ßÓй²Í¬µÄ½Ó¿Ú¡£Èç¹ûÖí°Ë½äÖ»Ïë ¼û¼û¸ß¼ÒÈýС½ãµÄ½¿ºÃÃæÈÝ£¬»òÕß̸̸Ìì˵˵µØ£¬ÄÇô¸ß¼ÒÈýС½ãµÄ¡°´úÀí¡±ËïÎò¿ÕÊÇÔÊÐí
µÄ£¬µ«Öí°Ë½äÏëÇ×Ç××죬ÄÇôÊDz»Ðеġ£ÕâÊDZ£»¤´úÀíģʽµÄÓ¦Óá£Ö»ÓдúÀí¶ÔÏóÈÏΪºÏÊÊ Ê±£¬²Å»á½«¿Í»§¶ËµÄÇëÇ󴫵ݸøÕæÊµÖ÷Ìâ¶ÔÏó¡£
×°ÊÎģʽ£ºÔÚ²»¸Ä±ä½Ó¿ÚµÄǰÌáÏ£¬¶¯Ì¬À©Õ¹¶ÔÏóµÄ¹¦ÄÜ
ËïÎò¿ÕÓÐÆßÊ®¶þ°ã±ä»¯£¬ÔÚ¶þÀÉÉñÑÛÀËûÓÀÔ¶ÊÇÄÇÖ»â©áø¡£×°ÊÎģʽÒÔ¶Ô¿Í»§Í¸Ã÷µÄ·½Ê½ ¶¯Ì¬µØ¸øÒ»¸ö¶ÔÏ󸽼ÓÉϸü¶àµÄÔðÈΡ£»»ÑÔÖ®£¬¿Í»§¶Ë²¢²»»á¾õµÃ¶ÔÏóÔÚ×°ÊÎǰºÍ×°ÊκóÓÐ
ʲô²»Í¬¡£×°ÊÎģʽ¿ÉÒÔÔÚ²»Ê¹Óô´Ôì¸ü¶à×ÓÀàµÄÇé¿öÏ£¬½«¶ÔÏóµÄ¹¦ÄܼÓÒÔÀ©Õ¹¡£ËûµÄÿ Ò»Öֱ仯¶¼¸øËû´øÀ´Ò»ÖÖ¸½¼ÓµÄ±¾Áì¡£Ëû±ä³ÉÓã¶ùʱ£¬¾Í¿ÉÒÔµ½Ë®ÀïÓÎÓ¾£»Ëû±ä³Éȸ¶ùʱ£¬
¾Í¿ÉÒÔÔÚÌìÉÏ·ÉÐС£¶ø²»¹ÜÎò¿ÕÔõô±ä»¯£¬ÔÚ¶þÀÉÉñÑÛÀËûÓÀÔ¶ÊÇÄÇÖ»â©áø¡£×°ÊÎģʽÒÔ ¶Ô¿Í»§Í¸Ã÷µÄ·½Ê½¶¯Ì¬µØ¸øÒ»¸ö¶ÔÏ󸽼ÓÉϸü¶àµÄÔðÈΡ£»»ÑÔÖ®£¬¿Í»§¶Ë²¢²»»á¾õµÃ¶ÔÏóÔÚ
×°ÊÎǰºÍ×°ÊκóÓÐʲô²»Í¬¡£×°ÊÎģʽ¿ÉÒÔÔÚ²»Ê¹Óô´Ôì¸ü¶à×ÓÀàµÄÇé¿öÏ£¬½«¶ÔÏóµÄ¹¦ÄÜ ¼ÓÒÔÀ©Õ¹¡£ |