¸ÅÊö
ÔÚÈí¼þϵͳÖУ¬ÓÉÓÚÓ¦Óû·¾³µÄ±ä»¯£¬³£³£ÐèÒª½«¡°Ò»Ð©ÏÖ´æµÄ¶ÔÏó¡±·ÅÔÚÐµĻ·¾³ÖÐÓ¦Ó㬵«ÊÇл·¾³ÒªÇóµÄ½Ó¿ÚÊÇÕâЩÏÖ´æ¶ÔÏóËù²»Âú×ãµÄ¡£ÄÇôÈçºÎÓ¦¶ÔÕâÖÖ¡°Ç¨ÒƵı仯¡±£¿ÈçºÎ¼ÈÄÜÀûÓÃÏÖÓжÔÏóµÄÁ¼ºÃʵÏÖ£¬Í¬Ê±ÓÖÄÜÂú×ãеÄÓ¦Óû·¾³ËùÒªÇóµÄ½Ó¿Ú£¿Õâ¾ÍÊDZ¾ÎÄҪ˵µÄAdapter
ģʽ¡£
Òâͼ
½«Ò»¸öÀàµÄ½Ó¿Úת»»³É¿Í»§Ï£ÍûµÄÁíÍâÒ»¸ö½Ó¿Ú¡£AdapterģʽʹµÃÔ±¾ÓÉÓÚ½Ó¿Ú²»¼æÈݶø²»ÄÜÒ»Æð¹¤×÷µÄÄÇЩÀà¿ÉÒÔÒ»Æð¹¤×÷¡£
½á¹¹Í¼

ͼ1 ÀàµÄAdapterģʽ½á¹¹Í¼

ͼ2 ¶ÔÏóµÄAdapterģʽ½á¹¹Í¼
Éú»îÖеÄÀý×Ó
ÊÊÅäÆ÷ģʽÔÊÐí½«Ò»¸öÀàµÄ½Ó¿Úת»»³É¿Í»§ÆÚÍûµÄÁíÒ»¸ö½Ó¿Ú£¬Ê¹µÃÔ±¾ÓÉÓÚ½Ó¿Ú²»¼æÈݶø²»ÄÜÒ»Æð¹¤×÷µÄÀà¿ÉÒÔÒ»Æð¹¤×÷¡£°âÊÖÌṩÁËÒ»¸öÊÊÅäÆ÷µÄÀý×Ó¡£Ò»¸ö¿×Ì×ÔÚ¼¬³ÝÉÏ£¬¼¬³ÝµÄÿ¸ö±ßµÄ³ß´çÊÇÏàͬµÄ¡£ÔÚÃÀ¹úµäÐ͵ı߳¤Îª1/2''ºÍ1/4''¡£ÏÔÈ»£¬Èç¹û²»Ê¹ÓÃÒ»¸öÊÊÅäÆ÷µÄ»°£¬1/2''µÄ¼¬³Ý²»ÄÜÊʺÏ1/4''µÄ¿×¡£Ò»¸ö1/2''ÖÁ1/4''µÄÊÊÅäÆ÷¾ßÓÐÒ»¸ö1/2''µÄÒõ²ÛÀ´Ì×ÉÏÒ»¸ö1/2''µÄ³Ý£¬Í¬Ê±ÓÐÒ»¸ö1/4µÄÑô²ÛÀ´¿¨Èë1/4''µÄ°âÊÖ¡£

ͼ3ʹÓðâÊÖÊÊÅäÆ÷Àý×ÓµÄÊÊÅäÆ÷¶ÔÏóͼ
ÊÊÅäÆ÷ģʽ½â˵
ÎÒÃÇ»¹ÊÇÒÔÈÕÖ¾¼Ç¼³ÌÐòΪÀý×Ó˵Ã÷Adapterģʽ¡£ÏÖÔÚÓÐÕâÑùÒ»¸ö³¡¾°£º¼ÙÉèÎÒÃÇÔÚÈí¼þ¿ª·¢ÖÐҪʹÓÃÒ»¸öµÚÈý·½µÄÈÕÖ¾¼Ç¼¹¤¾ß£¬¸ÃÈÕÖ¾¼Ç¼¹¤¾ßÖ§³ÖÊý¾Ý¿âÈÕÖ¾¼Ç¼DatabaseLogºÍÎı¾Îļþ¼Ç¼FileLogÁ½ÖÖ·½Ê½£¬ËüÌṩ¸øÎÒÃǵÄAPI½Ó¿ÚÊÇWrite()·½·¨£¬Ê¹Ó÷½·¨ÈçÏ£º
Log.Write("Logging Message!"); |
µ±Èí¼þϵͳ¿ª·¢½øÐе½Ò»°ëʱ£¬´¦ÓÚijÖÖÔÒò²»ÄܼÌÐøÊ¹ÓøÃÈÕÖ¾¼Ç¼¹¤¾ßÁË£¬ÐèÒª²ÉÓÃÁíÍâÒ»¸öÈÕÖ¾¼Ç¼¹¤¾ß£¬ËüͬÑùÒ²Ö§³ÖÊý¾Ý¿âÈÕÖ¾¼Ç¼DatabaseLogºÍÎı¾Îļþ¼Ç¼FileLogÁ½ÖÖ·½Ê½£¬Ö»²»¹ýËüÌṩ¸øÎÒÃǵÄAPI½Ó¿ÚÊÇWriteLog()·½·¨£¬Ê¹Ó÷½·¨ÈçÏ£º
Log.WriteLog("Logging Message!"); |
¸ÃÈÕÖ¾¼Ç¼¹¤¾ßµÄÀà½á¹¹Í¼ÈçÏ£º

ͼ4ÈÕÖ¾¼Ç¼¹¤¾ßÀà½á¹¹Í¼
ËüµÄʵÏÖ´úÂëÈçÏ£º
public abstract class LogAdaptee
{
public abstract void WriteLog();
}
public class DatabaseLog:LogAdaptee
{
public override void WriteLog()
{
Console.WriteLine("Called WriteLog Method");
}
}
public class FileLog:LogAdaptee
{
public override void WriteLog()
{
Console.WriteLine("Called WriteLog Method");
}
}
|
ÔÚÎÒÃÇ¿ª·¢Íê³ÉµÄÓ¦ÓóÌÐòÖÐÈÕÖ¾¼Ç¼½Ó¿ÚÖУ¨²»·Á³ÆÖ®ÎªILogTarget½Ó¿Ú£¬ÔÚ±¾ÀýÖÐΪÁ˸ü¼ÓÇå³þµØËµÃ÷£¬ÔÚÃüÃûÉϲÉÓÃÁËAdapterģʽÖеÄÏà¹Ø½ÇÉ«Ãû×Ö£©£¬È´Óõ½ÁË´óÁ¿µÄWrite()·½·¨£¬³ÌÐòÒѾȫ²¿Í¨¹ýÁ˲âÊÔ£¬ÎÒÃDz»ÄÜÈ¥Ð޸ĸýӿڡ£´úÂëÈçÏ£º
public interface ILogTarget
{
void Write();
}
|
ÕâʱҲÐíÎÒÃÇ»áÏëµ½ÐÞ¸ÄÏÖÔÚµÄÈÕÖ¾¼Ç¼¹¤¾ßµÄAPI½Ó¿Ú£¬µ«ÊÇÓÉÓÚ°æÈ¨µÈÔÒòÎÒÃDz»Äܹ»ÐÞ¸ÄËüµÄÔ´´úÂ룬´ËʱAdapterģʽ±ã¿ÉÒÔÅÉÉÏÓó¡ÁË¡£ÏÂÃæÎÒÃÇͨ¹ýAdapterģʽÀ´Ê¹µÃ¸ÃÈÕÖ¾¼Ç¼¹¤¾ßÄܹ»·ûºÏÎÒÃǵ±Ç°µÄÐèÇó¡£
Ç°ÃæËµ¹ý£¬AdapterģʽÓÐÁ½ÖÖʵÏÖÐÎʽµÄʵÏֽṹ£¬Ê×ÏÈÀ´¿´Ò»ÏÂÀàÊÊÅäÆ÷ÈçºÎʵÏÖ¡£ÏÖÔÚΨһ¿ÉÐеİ취¾ÍÊÇÔÚ³ÌÐòÖÐÒýÈëеÄÀàÐÍ£¬ÈÃËüÈ¥¼Ì³ÐLogAdapteeÀ࣬ͬʱÓÖʵÏÖÒÑÓеÄILogTarget½Ó¿Ú¡£ÓÉÓÚLogAdapteeÓÐÁ½ÖÖÀàÐ͵ķ½Ê½£¬×ÔÈ»ÎÒÃÇÒªÒýÈëÁ½¸ö·Ö±ðΪDatabaseLogAdapterºÍFileLogAdapterµÄÀà¡£

ͼ5 ÒýÈëÀàÊÊÅäÆ÷ºóµÄ½á¹¹Í¼
ʵÏÖ´úÂëÈçÏ£º
public class DatabaseLogAdapter:DatabaseLog,ILogTarget
{
public void Write()
{
WriteLog();
}
}
public class FileLogAdapter:FileLog,ILogTarget
{
public void Write()
{
this.WriteLog();
}
}
|
ÕâÀïÐèҪעÒâµÄÒ»µãÊÇÎÒÃÇΪÿһÖÖÈÕÖ¾¼Ç¼·½Ê½¶¼±àдÁËËüµÄÊÊÅäÀ࣬ÄÇΪʲô²»ÄÜΪ³éÏóÀàLogAdapteeÀ´±àдһ¸öÊÊÅäÀàÄØ£¿ÒòΪDatabaseLogºÍFileLogËäȻͬʱ¼Ì³ÐÓÚ³éÏóÀàLogAdaptee£¬µ«ÊÇËüÃǾßÌåµÄWriteLog()·½·¨µÄʵÏÖÊDz»Í¬µÄ¡£Ö»Óм̳ÐÓڸþßÌåÀ࣬²ÅÄܱ£ÁôÆäÔÓеÄÐÐΪ¡£
ÎÒÃÇ¿´Ò»ÏÂÕâʱ¿Í»§¶ËµÄ³ÌÐòµÄµ÷Ó÷½·¨£º
public class App
{
public static void Main()
{
ILogTarget dbLog = new DatabaseLogAdapter();
dbLog.Write("Logging Database...");
ILogTarget fileLog = new FileLogAdapter();
fileLog.Write("Logging File...");
}
}
|
ÏÂÃæ¿´Ò»ÏÂÈçºÎͨ¹ý¶ÔÏóÊÊÅäÆ÷µÄ·½Ê½À´´ïµ½ÎÒÃÇÊÊÅäµÄÄ¿µÄ¡£¶ÔÏóÊÊÅäÆ÷ÊDzÉÓöÔÏó×éºÏ¶ø²»ÊÇʹÓü̳У¬Àà½á¹¹Í¼ÈçÏ£º

ͼ6ÒýÈë¶ÔÏóÊÊÅäÆ÷ºóµÄ½á¹¹Í¼
ʵÏÖ´úÂëÈçÏ£º
public class LogAdapter:ILogTarget
{
private LogAdaptee _adaptee;
public LogAdapter(LogAdaptee adaptee)
{
this._adaptee = adaptee;
}
public void Write()
{
_adaptee.WriteLog();
}
}
|
ÓëÀàÊÊÅäÆ÷Ïà±È½Ï£¬¿ÉÒÔ¿´µ½×î´óµÄÇø±ðÊÇÊÊÅäÆ÷ÀàµÄÊýÁ¿¼õÉÙÁË£¬²»ÔÙÐèҪΪÿһÖÖ¾ßÌåµÄÈÕÖ¾¼Ç¼·½Ê½À´´´½¨Ò»¸öÊÊÅäÆ÷Àࡣͬʱ¿ÉÒÔ¿´µ½£¬ÒýÈë¶ÔÏóÊÊÅäÆ÷ºó£¬ÊÊÅäÆ÷À಻ÔÙÒÀÀµÓÚ¾ßÌåµÄDatabaseLogÀàºÍFileLogÀ࣬¸üºÃµÄʵÏÖÁËËÉñîºÏ¡£
ÔÙ¿´Ò»Ï¿ͻ§¶Ë³ÌÐòµÄµ÷Ó÷½·¨£º
public class App
{
public static void Main()
{
ILogTarget dbLog = new LogAdapter(new DatabaseLog());
dbLog.Write("Logging Database...");
ILogTarget fileLog = new LogAdapter(new FileLog());
fileLog.Write("Logging Database...");
}
}
|
ͨ¹ýAdapterģʽ£¬ÎÒÃǺܺõÄʵÏÖÁ˶ÔÏÖÓÐ×é¼þµÄ¸´Ó᣶ԱÈÒÔÉÏÁ½ÖÖÊÊÅ䷽ʽ£¬¿ÉÒÔ×ܽá³ö£¬ÔÚÀàÊÊÅ䷽ʽÖУ¬ÎÒÃǵõ½µÄÊÊÅäÆ÷ÀàDatabaseLogAdapterºÍFileLogAdapter¾ßÓÐËüËù¼Ì³ÐµÄ¸¸ÀàµÄËùÓеÄÐÐΪ£¬Í¬Ê±Ò²¾ßÓнӿÚILogTargetµÄËùÓÐÐÐΪ£¬ÕâÑùÆäʵÊÇÎ¥±³ÁËÃæÏò¶ÔÏóÉè¼ÆÔÔòÖеÄÀàµÄµ¥Ò»Ö°ÔðÔÔò£¬¶ø¶ÔÏóÊÊÅäÆ÷Ôò¸ü·ûºÏÃæÏò¶ÔÏóµÄ¾«Éñ£¬ËùÒÔÔÚʵ¼ÊÓ¦ÓÃÖв»Ì«ÍƼöÀàÊÊÅäÕâÖÖ·½Ê½¡£ÔÙ»»¸ö½Ç¶ÈÀ´¿´ÀàÊÊÅ䷽ʽ£¬¼ÙÉèÎÒÃÇÒªÊÊÅä³öÀ´µÄÀàÔڼǼÈÕ־ʱͬʱдÈëÎļþºÍÊý¾Ý¿â£¬ÄÇôÓöÔÏóÊÊÅäÆ÷ÎÒÃÇ»áÕâÑùȥд£º
public class LogAdapter:ILogTarget
{
private LogAdaptee _adaptee1;
private LogAdaptee _adaptee2;
public LogAdapter(LogAdaptee adaptee1,LogAdaptee adaptee2)
{
this._adaptee1 = adaptee1;
this._adaptee2 = adaptee2;
}
public void Write()
{
_adaptee1.WriteLog();
_adaptee2.WriteLog();
}
}
|
Èç¹û¸ÄÓÃÀàÊÊÅäÆ÷£¬ÄѵÀÕâÑùȥд£º
public class DatabaseLogAdapter:DatabaseLog,FileLog,ILogTarget
{
public void Write()
{
//WriteLog();
}
}
|
ÏÔÈ»ÊDz»¶ÔµÄ£¬ÕâÑùµÄ½âÊÍËä˵ÓÐЩǣǿ£¬Ò²×ãÒÔ˵Ã÷һЩÎÊÌ⣬µ±È»Á˲¢²»ÊÇ˵ÀàÊÊÅäÆ÷ÔÚÈκÎÇé¿ö϶¼²»Ê¹Óã¬Õë¶Ô¿ª·¢³¡¾°²»Í¬£¬Ä³Ð©Ê±ºò»¹ÊÇ¿ÉÒÔÓÃÀàÊÊÅäÆ÷µÄ·½Ê½¡£
.NETÖеÄÊÊÅäÆ÷ģʽ
1£®AdapterģʽÔÚ.NET FrameworkÖеÄÒ»¸ö×î´óµÄÓ¦ÓþÍÊÇCOM Interop¡£COM
Interop¾ÍºÃÏñÊÇCOMºÍ.NETÖ®¼äµÄÒ»ÌõŦ´ø£¬Ò»×ùÇÅÁº¡£ÎÒÃÇÖªµÀ£¬COM×é¼þ¶ÔÏóÓë.NETÀà¶ÔÏóÊÇÍêÈ«²»Í¬µÄ£¬µ«ÎªÁËʹCOM¿Í»§³ÌÐòÏóµ÷ÓÃCOM×é¼þÒ»Ñùµ÷ÓÃ.NET¶ÔÏó£¬Ê¹.NET³ÌÐò
ÏóʹÓÃ.NET¶ÔÏóÒ»ÑùʹÓÃCOM×é¼þ£¬Î¢ÈíÔÚ´¦Àí·½Ê½ÉϲÉÓÃÁËAdapterģʽ£¬¶ÔCOM¶ÔÏó½øÐаü×°£¬Õâ¸ö°ü×°Àà¾ÍÊÇRCW(Runtime
Callable Wrapper)¡£RCWʵ¼ÊÉÏÊÇruntimeÉú³ÉµÄÒ»¸ö.NETÀ࣬Ëü°ü×°ÁËCOM×é¼þµÄ·½·¨£¬²¢ÄÚ²¿ÊµÏÖ¶ÔCOM×é¼þµÄµ÷Óá£ÈçÏÂͼËùʾ£º

ͼ7 .NET³ÌÐòÓëCOM»¥Ïàµ÷ÓÃʾÒâͼ
2£®.NETÖеÄÁíÒ»¸öAdapterģʽµÄÓ¦ÓþÍÊÇDataAdapter¡£ADO.NETΪͳһµÄÊý¾Ý·ÃÎÊÌṩÁ˶à¸ö½Ó¿ÚºÍ»ùÀ࣬ÆäÖÐ×îÖØÒªµÄ½Ó¿ÚÖ®Ò»ÊÇIdataAdapter¡£ÓëÖ®Ïà¶ÔÓ¦µÄDataAdpterÊÇÒ»¸ö³éÏóÀ࣬ËüÊÇADO.NETÓë¾ßÌåÊý¾Ý¿â²Ù×÷Ö®¼äµÄÊý¾ÝÊÊÅäÆ÷µÄ»ùÀà¡£DataAdpterÆðµ½ÁËÊý¾Ý¿âµ½DataSetÇŽӯ÷µÄ×÷Óã¬Ê¹Ó¦ÓóÌÐòµÄÊý¾Ý²Ù×÷ͳһµ½DataSetÉÏ£¬¶øÓë¾ßÌåµÄÊý¾Ý¿âÀàÐÍÎ޹ء£ÉõÖÁ¿ÉÒÔÕë¶ÔÌØÊâµÄÊý¾ÝÔ´±àÖÆ×Ô¼ºµÄDataAdpter£¬´Ó¶øÊ¹ÎÒÃǵÄÓ¦ÓóÌÐòÓëÕâÐ©ÌØÊâµÄÊý¾ÝÔ´Ïà¼æÈÝ¡£×¢ÒâÕâÊÇÒ»¸öÊÊÅäÆ÷µÄ±äÌå¡£
ʵÏÖÒªµã
1£®AdapterģʽÖ÷ÒªÓ¦ÓÃÓÚ¡°Ï£Íû¸´ÓÃһЩÏÖ´æµÄÀ࣬µ«ÊǽӿÚÓÖÓ븴Óû·¾³ÒªÇó²»Ò»ÖµÄÇé¿ö¡±£¬ÔÚÒÅÁô´úÂ븴Óá¢Àà¿âÇ¨ÒÆµÈ·½Ãæ·Ç³£ÓÐÓá£
2£®AdapterģʽÓжÔÏóÊÊÅäÆ÷ºÍÀàÊÊÅäÆ÷Á½ÖÖÐÎʽµÄʵÏֽṹ£¬µ«ÊÇÀàÊÊÅäÆ÷²ÉÓá°¶à¼Ì³Ð¡±µÄʵÏÖ·½Ê½£¬´øÀ´Á˲»Á¼µÄ¸ßñîºÏ£¬ËùÒÔÒ»°ã²»ÍƼöʹÓ᣶ÔÏóÊÊÅäÆ÷²ÉÓá°¶ÔÏó×éºÏ¡±µÄ·½Ê½£¬¸ü·ûºÏËÉñîºÏ¾«Éñ¡£
3£®AdapterģʽµÄʵÏÖ¿ÉÒԷdz£µÄÁé»î£¬²»±Ø¾ÐÄàÓÚGOF23Öж¨ÒåµÄÁ½Öֽṹ¡£ÀýÈ磬ÍêÈ«¿ÉÒÔ½«AdapterģʽÖеġ°ÏÖ´æ¶ÔÏó¡±×÷ΪеĽӿڷ½·¨²ÎÊý£¬À´´ïµ½ÊÊÅäµÄÄ¿µÄ¡£
4£®Adapterģʽ±¾ÉíÒªÇóÎÒÃǾ¡¿ÉÄܵØÊ¹Óá°ÃæÏò½Ó¿ÚµÄ±à³Ì¡±·ç¸ñ£¬ÕâÑù²ÅÄÜÔÚºóÆÚºÜ·½±ãµÄÊÊÅä¡£[ÒÔÉϼ¸µãÒýÓÃ×ÔMSDN
WebCast]
Ч¹û
¶ÔÓÚÀàÊÊÅäÆ÷£º
1£®ÓÃÒ»¸ö¾ßÌåµÄAdapterÀà¶ÔAdapteeºÍTaget½øÐÐÆ¥Åä¡£½á¹ûÊǵ±ÎÒÃÇÏëҪƥÅäÒ»¸öÀàÒÔ¼°ËùÓÐËüµÄ×ÓÀàʱ£¬ÀàAdapter½«²»ÄÜʤÈι¤×÷¡£
2£®Ê¹µÃAdapter¿ÉÒÔÖØ¶¨ÒåAdapteeµÄ²¿·ÖÐÐΪ£¬ÒòΪAdapterÊÇAdapteeµÄÒ»¸ö×ÓÀà¡£
3£®½ö½öÒýÈëÁËÒ»¸ö¶ÔÏ󣬲¢²»ÐèÒª¶îÍâµÄÖ¸ÕëÒ»¼ä½ÓµÃµ½Adaptee.
¶ÔÓÚ¶ÔÏóÊÊÅäÆ÷£º
1£®ÔÊÐíÒ»¸öAdapterÓë¶à¸öAdaptee£¬¼´Adaptee±¾ÉíÒÔ¼°ËüµÄËùÓÐ×ÓÀࣨÈç¹ûÓÐ×ÓÀàµÄ»°£©Í¬Ê±¹¤×÷¡£AdapterÒ²¿ÉÒÔÒ»´Î¸øËùÓеÄAdapteeÌí¼Ó¹¦ÄÜ¡£
2£®Ê¹µÃÖØ¶¨ÒåAdapteeµÄÐÐΪ±È½ÏÀ§ÄÑ¡£Õâ¾ÍÐèÒªÉú³ÉAdapteeµÄ×ÓÀಢÇÒʹµÃAdapterÒýÓÃÕâ¸ö×ÓÀà¶ø²»ÊÇÒýÓÃAdaptee±¾Éí¡£
ÊÊÓÃÐÔ
ÔÚÒÔϸ÷ÖÖÇé¿öÏÂʹÓÃÊÊÅäÆ÷ģʽ£º
1£®ÏµÍ³ÐèҪʹÓÃÏÖÓеÄÀ࣬¶ø´ËÀàµÄ½Ó¿Ú²»·ûºÏϵͳµÄÐèÒª¡£
2£®ÏëÒª½¨Á¢Ò»¸ö¿ÉÒÔÖØ¸´Ê¹ÓõÄÀ࣬ÓÃÓÚÓëһЩ±Ë´ËÖ®¼äûÓÐÌ«´ó¹ØÁªµÄһЩÀ࣬°üÀ¨Ò»Ð©¿ÉÄÜÔÚ½«À´Òý½øµÄÀàÒ»Æð¹¤×÷¡£ÕâЩԴÀ಻һ¶¨Óкܸ´ÔӵĽӿڡ£
3£®£¨¶Ô¶ÔÏóÊÊÅäÆ÷¶øÑÔ£©ÔÚÉè¼ÆÀÐèÒª¸Ä±ä¶à¸öÒÑÓÐ×ÓÀàµÄ½Ó¿Ú£¬Èç¹ûʹÓÃÀàµÄÊÊÅäÆ÷ģʽ£¬¾ÍÒªÕë¶Ôÿһ¸ö×ÓÀà×öÒ»¸öÊÊÅäÆ÷£¬¶øÕⲻ̫ʵ¼Ê¡£
×ܽá
×ÜÖ®£¬Í¨¹ýÔËÓÃAdapterģʽ£¬¾Í¿ÉÒÔ³ä·ÖÏíÊܽøÐÐÀà¿âÇ¨ÒÆ¡¢Àà¿âÖØÓÃËù´øÀ´µÄÀÖȤ¡£
|