通過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