電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 48|回復(fù): 0
收起左側(cè)

嵌入式 C 語(yǔ)言設(shè)計(jì)模式 --- 代理模式

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
匿名  發(fā)表于 2023-2-10 17:50:00 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我是老溫,一名熱愛(ài)學(xué)習(xí)的嵌入式工程師
關(guān)注我,一起變得更加優(yōu)秀!
1
- 什么是代理模式?


代理模式(Proxy Pattern),是指當(dāng)客戶(hù)端無(wú)法訪問(wèn)某個(gè)對(duì)象或者訪問(wèn)某個(gè)對(duì)象存在困難的時(shí)候,可以通過(guò)一個(gè)代理對(duì)象來(lái)進(jìn)行間接訪問(wèn)。

舉一個(gè)生活中的例子,比如,我們?cè)谫I(mǎi)火車(chē)票或者飛機(jī)票的時(shí)候,有時(shí)候不會(huì)直接在12306或者航空公司官網(wǎng)上面購(gòu)買(mǎi),而是會(huì)通過(guò)網(wǎng)絡(luò)上某些代理(或中介)渠道進(jìn)行購(gòu)票,如攜程,同程,飛豬,等等。

這些網(wǎng)絡(luò)代理渠道,就相當(dāng)于一個(gè)代理者的角色,幫我們(客戶(hù)端)完成了購(gòu)票這一個(gè)動(dòng)作。

代理模式從結(jié)構(gòu)上來(lái)看,跟適配器模式非常相似,這兩種設(shè)計(jì)模式都是增加了一個(gè)中間層,作為客戶(hù)端與真實(shí)對(duì)象之間的橋梁,但代理模式與適配器模式又有著本質(zhì)上的不同。

通俗來(lái)說(shuō),代理模式就好比是皇帝讓太監(jiān)代理自己宣讀圣旨,而官員(客戶(hù)端)只能通過(guò)太監(jiān)(代理角色)知道皇帝的旨意。

適配器模式就好比是皇帝(客戶(hù)端)聽(tīng)不懂外國(guó)使者說(shuō)的外語(yǔ),只能通過(guò)翻譯(適配器)與外國(guó)使者進(jìn)行溝通。


圖片來(lái)源:網(wǎng)絡(luò)

2 – 什么情況下要用代理模式?

在嵌入式C語(yǔ)言軟件設(shè)計(jì)的時(shí)候,在某些情況下,客戶(hù)端角色不方便直接訪問(wèn)某個(gè)對(duì)象的時(shí)候,就可以使用代理模式,通過(guò)一個(gè)代理接口,來(lái)間接訪問(wèn)某個(gè)對(duì)象。

比如說(shuō),在進(jìn)行網(wǎng)絡(luò)(比如藍(lán)牙網(wǎng)絡(luò),WiFi網(wǎng)絡(luò),有線網(wǎng)絡(luò),等等)數(shù)據(jù)收發(fā)的時(shí)候,就可以通過(guò)一個(gè)網(wǎng)絡(luò)代理接口,代替實(shí)際的底層硬件接口,進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的收發(fā)。

客戶(hù)端角色一般不直接調(diào)用網(wǎng)絡(luò)接口進(jìn)行數(shù)據(jù)收發(fā),而是通過(guò)網(wǎng)絡(luò)代理接口。

因?yàn)樵谀承﹫?chǎng)合下,比如我們的筆記本電腦,在無(wú)線網(wǎng)卡和有線網(wǎng)卡共存的情況下,客戶(hù)端應(yīng)用程序通常只關(guān)心數(shù)據(jù)通過(guò)網(wǎng)絡(luò)的方式進(jìn)行發(fā)送,而不關(guān)心具體是用了有線網(wǎng)絡(luò)還是無(wú)線網(wǎng)絡(luò)。

這個(gè)時(shí)候,為客戶(hù)端提供一個(gè)網(wǎng)絡(luò)數(shù)據(jù)收發(fā)的代理類(lèi),就顯得十分重要了。當(dāng)我們的筆記本電腦切換有線或無(wú)線網(wǎng)卡的時(shí)候,也不影響客戶(hù)端應(yīng)用程序進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)收發(fā)。


3 – 如何使用代理模式?

以有線網(wǎng)絡(luò)(wire_network)和無(wú)線網(wǎng)絡(luò)(wireless_network)這兩者為例,講述在嵌入式C語(yǔ)言環(huán)境下,如何使用代理模式進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)收發(fā)。

1、先聲明一個(gè)網(wǎng)絡(luò)代理類(lèi)接口,這個(gè)代理類(lèi)提供了網(wǎng)絡(luò)數(shù)據(jù)收發(fā)的接口,注意,這只是一個(gè)接口,實(shí)際的網(wǎng)絡(luò)數(shù)據(jù)收發(fā)操作,需要給這個(gè)代理類(lèi)接口的函數(shù)指針進(jìn)行填充賦值。網(wǎng)絡(luò)代理類(lèi)的實(shí)現(xiàn)代碼,如下圖所示。
回復(fù)

使用道具

發(fā)表回復(fù)

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表