通过Elecias White的书“制作嵌入式系统”(来自O'Reilly)让我感到困惑,因为这两个术语:Facade和Adapter模式。她给出的解释都不明确。面向嵌入式系统的适配器模式
适配器模式(PAG,19):“(...有时也被称为包装)这一个对象的接口转换成一个为客户更容易...通常情况下,适配器被改写软件API来隐藏难看的界面......“。
外观模式(PAG 86):“......它提供了一个简化的接口的一段代码...”。然后它说:“......适配器模式是门面模式的更一般的”。
可悲的是这两个词似乎与我相似。
从这个网站(和其他人)的其他定义大多数人都说“适配器模式使兼容的两个接口不兼容”。这个词是什么“不相容”的意思是在这种情况下?
大多数网站和书籍从嵌入式系统的角度(普通的C,而不是OOP)以外的更高级别给出了他们对模式的定义,所以给出的例子的确并不清楚。
值得一提的是,虽然书是知识的极好来源,对于初学者和专业人士,其中不包括这么多的代码,所以应该搞清楚这种定义。
我试图通过我为自己写的一些例子来理解它们,你会告诉我我的理解是否正确吗?
实施例1,外观模式:
/* This is a fancy API that I want to 'facade' */
fancy_gui_DrawWidget(parent, id, x0, y0, x1, y1, text, txt_color, back_color, brdr_color, draw_callback(), ... and more parameters)
{
/* draw the widget */
}
/* Here I'm using the 'facade pattern' */
mygui_DrawButton(parent, id, x, y, width, height, text)
{
...
x1=x+width;
y1=y+height;
...
fancy_gui_DrawWidget(parent, id, x, y, x1, y1, text, BLACK, WHITE, ORANGE, button_draw_fn, ... and some more parameters needed);
}
例2中,适配器模式:
/* Ugly interface that I want to 'adapt' (from LPC17xx NXP's CMSIS library) */
uint32_t UART_Send(
LPC_UART_TypeDef *UARTx,
uint8_t *txbuf,
uint32_t buflen,
TRANSFER_BLOCK_Type flag)
{
/* transmits the txbuf */
}
/* Here I'm using the 'adapter pattern' (I think so) for a good looking interface */
int uart0_Send(buffer, len_buffer)
{
/* Do some stuff */
len=UART_Send(uart0_handler,buffer,len_buffer, BLOCKING);
if(len!=len_buffer)
return 0;
return 1;
}
希望我解释不够好自己。先进的谢谢!
抛出代理模式,让自己更加迷惑:) – haylem