Elecias White の著書「Making Embedded Systems」 (O'Reilly から) を読んで、Facade パターンと Adapter パターンという 2 つの用語のために混乱しました。彼女が両方について与える説明は、まったく明確ではありません。
Adapter Pattern (Pag, 19): 「(...ラッパーと呼ばれることもあります)オブジェクトのインターフェースをクライアントにとってより簡単なものに変換します.....多くの場合、アダプターは醜いインターフェースを隠すためにソフトウェア API の上に書かれています. ..」 .
Facade パターン(Pag. 86): 「...コードへの簡素化されたインターフェイスを提供します...」. 次に、「...アダプターパターンはファサードパターンのより一般的なバージョンです」と表示されます。
悲しいことに、どちらの用語も私には似ているように思えます。
このサイト (および他のサイト) の他の定義から、ほとんどの人は「アダプター パターンにより、互換性のない 2 つのインターフェイスが互換性を持つようになる」と言います。この文脈で「相容れない」という言葉はどういう意味ですか?
ほとんどのサイトや書籍では、組み込みシステムの観点 (OOP ではなくプレーン C) 以外のより高いレベルからのパターンに関する定義が示されているため、示されている例は実際には明確ではありません。
この本は、初心者と専門家の両方にとって優れた知識源ですが、それほど多くのコードが含まれていないため、この種の定義を理解する必要があることに注意してください。
私が自分用に書いたいくつかの例を通してそれらを理解しようとしましたが、私の理解が正しいかどうか教えていただけますか?
例 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;
}
私が自分で十分に説明したことを願っています。よろしくお願いします!