最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go設(shè)計(jì)模式之備忘錄模式圖文詳解

 更新時(shí)間:2023年08月02日 08:28:04   作者:demo007x  
備忘錄模式是一種行為設(shè)計(jì)模式, 允許在不暴露對(duì)象實(shí)現(xiàn)細(xì)節(jié)的情況下保存和恢復(fù)對(duì)象之前的狀態(tài),本文主要通過(guò)一些圖片來(lái)給大家介紹一下Go的備忘錄模式,需要的朋友可以參考下

備忘錄模式

亦稱: 快照、Snapshot、Memento

意圖

備忘錄模式是一種行為設(shè)計(jì)模式, 允許在不暴露對(duì)象實(shí)現(xiàn)細(xì)節(jié)的情況下保存和恢復(fù)對(duì)象之前的狀態(tài)。

問(wèn)題

假如你正在開(kāi)發(fā)一款文字編輯器應(yīng)用程序。 除了簡(jiǎn)單的文字編輯功能外, 編輯器中還要有設(shè)置文本格式和插入內(nèi)嵌圖片等功能。

后來(lái), 你決定讓用戶能撤銷施加在文本上的任何操作。 這項(xiàng)功能在過(guò)去幾年里變得十分普遍, 因此用戶期待任何程序都有這項(xiàng)功能。 你選擇采用直接的方式來(lái)實(shí)現(xiàn)該功能: 程序在執(zhí)行任何操作前會(huì)記錄所有的對(duì)象狀態(tài), 并將其保存下來(lái)。 當(dāng)用戶此后需要撤銷某個(gè)操作時(shí), 程序?qū)臍v史記錄中獲取最近的快照, 然后使用它來(lái)恢復(fù)所有對(duì)象的狀態(tài)。

程序在執(zhí)行操作前保存所有對(duì)象的狀態(tài)快照, 稍后可通過(guò)快照將對(duì)象恢復(fù)到之前的狀態(tài)。

讓我們來(lái)思考一下這些狀態(tài)快照。 首先, 到底該如何生成一個(gè)快照呢? 很可能你會(huì)需要遍歷對(duì)象的所有成員變量并將其數(shù)值復(fù)制保存。 但只有當(dāng)對(duì)象對(duì)其內(nèi)容沒(méi)有嚴(yán)格訪問(wèn)權(quán)限限制的情況下, 你才能使用該方式。 不過(guò)很遺憾, 絕大部分對(duì)象會(huì)使用私有成員變量來(lái)存儲(chǔ)重要數(shù)據(jù), 這樣別人就無(wú)法輕易查看其中的內(nèi)容。

現(xiàn)在我們暫時(shí)忽略這個(gè)問(wèn)題, 假設(shè)對(duì)象都像嬉皮士一樣: 喜歡開(kāi)放式的關(guān)系并會(huì)公開(kāi)其所有狀態(tài)。 盡管這種方式能夠解決當(dāng)前問(wèn)題, 讓你可隨時(shí)生成對(duì)象的狀態(tài)快照, 但這種方式仍存在一些嚴(yán)重問(wèn)題。 未來(lái)你可能會(huì)添加或刪除一些成員變量。 這聽(tīng)上去很簡(jiǎn)單, 但需要對(duì)負(fù)責(zé)復(fù)制受影響對(duì)象狀態(tài)的類進(jìn)行更改。

如何復(fù)制對(duì)象的私有狀態(tài)?

還有更多問(wèn)題。 讓我們來(lái)考慮編輯器 (Editor) 狀態(tài)的實(shí)際 “快照”, 它需要包含哪些數(shù)據(jù)? 至少必須包含實(shí)際的文本、 光標(biāo)坐標(biāo)和當(dāng)前滾動(dòng)條位置等。 你需要收集這些數(shù)據(jù)并將其放入特定容器中, 才能生成快照。

你很可能會(huì)將大量的容器對(duì)象存儲(chǔ)在歷史記錄列表中。 這樣一來(lái), 容器最終大概率會(huì)成為同一個(gè)類的對(duì)象。 這個(gè)類中幾乎沒(méi)有任何方法, 但有許多與編輯器狀態(tài)一一對(duì)應(yīng)的成員變量。 為了讓其他對(duì)象能保存或讀取快照, 你很可能需要將快照的成員變量設(shè)為公有。 無(wú)論這些狀態(tài)是否私有, 其都將暴露一切編輯器狀態(tài)。 其他類會(huì)對(duì)快照類的每個(gè)小改動(dòng)產(chǎn)生依賴, 除非這些改動(dòng)僅存在于私有成員變量或方法中, 而不會(huì)影響外部類。

我們似乎走進(jìn)了一條死胡同: 要么會(huì)暴露類的所有內(nèi)部細(xì)節(jié)而使其過(guò)于脆弱; 要么會(huì)限制對(duì)其狀態(tài)的訪問(wèn)權(quán)限而無(wú)法生成快照。 那么, 我們還有其他方式來(lái)實(shí)現(xiàn) “撤銷” 功能嗎?

解決方案

我們剛才遇到的所有問(wèn)題都是封裝 “破損” 造成的。 一些對(duì)象試圖超出其職責(zé)范圍的工作。 由于在執(zhí)行某些行為時(shí)需要獲取數(shù)據(jù), 所以它們侵入了其他對(duì)象的私有空間, 而不是讓這些對(duì)象來(lái)完成實(shí)際的工作。

備忘錄模式將創(chuàng)建狀態(tài)快照 (Snapshot) 的工作委派給實(shí)際狀態(tài)的擁有者原發(fā)器 (Originator) 對(duì)象。 這樣其他對(duì)象就不再需要從 “外部” 復(fù)制編輯器狀態(tài)了, 編輯器類擁有其狀態(tài)的完全訪問(wèn)權(quán), 因此可以自行生成快照。

模式建議將對(duì)象狀態(tài)的副本存儲(chǔ)在一個(gè)名為備忘錄 (Memento) 的特殊對(duì)象中。 除了創(chuàng)建備忘錄的對(duì)象外, 任何對(duì)象都不能訪問(wèn)備忘錄的內(nèi)容。 其他對(duì)象必須使用受限接口與備忘錄進(jìn)行交互, 它們可以獲取快照的元數(shù)據(jù) (創(chuàng)建時(shí)間和操作名稱等), 但不能獲取快照中原始對(duì)象的狀態(tài)。

原發(fā)器擁有對(duì)備忘錄的完全訪問(wèn)權(quán)限, 負(fù)責(zé)人則只能訪問(wèn)元數(shù)據(jù)。

這種限制策略允許你將備忘錄保存在通常被稱為負(fù)責(zé)人 (Caretakers) 的對(duì)象中。 由于負(fù)責(zé)人僅通過(guò)受限接口與備忘錄互動(dòng), 故其無(wú)法修改存儲(chǔ)在備忘錄內(nèi)部的狀態(tài)。 同時(shí), 原發(fā)器擁有對(duì)備忘錄所有成員的訪問(wèn)權(quán)限, 從而能隨時(shí)恢復(fù)其以前的狀態(tài)。

在文字編輯器的示例中, 我們可以創(chuàng)建一個(gè)獨(dú)立的歷史 (History) 類作為負(fù)責(zé)人。 編輯器每次執(zhí)行操作前, 存儲(chǔ)在負(fù)責(zé)人中的備忘錄棧都會(huì)生長(zhǎng)。 你甚至可以在應(yīng)用的 UI 中渲染該棧, 為用戶顯示之前的操作歷史。

當(dāng)用戶觸發(fā)撤銷操作時(shí), 歷史類將從棧中取回最近的備忘錄, 并將其傳遞給編輯器以請(qǐng)求進(jìn)行回滾。 由于編輯器擁有對(duì)備忘錄的完全訪問(wèn)權(quán)限, 因此它可以使用從備忘錄中獲取的數(shù)值來(lái)替換自身的狀態(tài)。

備忘錄模式結(jié)構(gòu)

基于嵌套類的實(shí)現(xiàn)

該模式的經(jīng)典實(shí)現(xiàn)方式依賴于許多流行編程語(yǔ)言 (例如 C++、 C# 和 Java) 所支持的嵌套類。

  • 原發(fā)器 (Originator) 類可以生成自身狀態(tài)的快照, 也可以在需要時(shí)通過(guò)快照恢復(fù)自身狀態(tài)。

  • 備忘錄 (Memento) 是原發(fā)器狀態(tài)快照的值對(duì)象 (value object)。 通常做法是將備忘錄設(shè)為不可變的, 并通過(guò)構(gòu)造函數(shù)一次性傳遞數(shù)據(jù)。

  • 負(fù)責(zé)人 (Caretaker) 僅知道 “何時(shí)” 和 “為何” 捕捉原發(fā)器的狀態(tài), 以及何時(shí)恢復(fù)狀態(tài)。

    負(fù)責(zé)人通過(guò)保存?zhèn)渫洍?lái)記錄原發(fā)器的歷史狀態(tài)。 當(dāng)原發(fā)器需要回溯歷史狀態(tài)時(shí), 負(fù)責(zé)人將從棧中獲取最頂部的備忘錄, 并將其傳遞給原發(fā)器的恢復(fù) (restoration) 方法。

  • 在該實(shí)現(xiàn)方法中, 備忘錄類將被嵌套在原發(fā)器中。 這樣原發(fā)器就可訪問(wèn)備忘錄的成員變量和方法, 即使這些方法被聲明為私有。 另一方面, 負(fù)責(zé)人對(duì)于備忘錄的成員變量和方法的訪問(wèn)權(quán)限非常有限: 它們只能在棧中保存?zhèn)渫洠?而不能修改其狀態(tài)。

基于中間接口的實(shí)現(xiàn)

另外一種實(shí)現(xiàn)方法適用于不支持嵌套類的編程語(yǔ)言 (沒(méi)錯(cuò), 我說(shuō)的就是 PHP)。

  • 在沒(méi)有嵌套類的情況下, 你可以規(guī)定負(fù)責(zé)人僅可通過(guò)明確聲明的中間接口與備忘錄互動(dòng), 該接口僅聲明與備忘錄元數(shù)據(jù)相關(guān)的方法, 限制其對(duì)備忘錄成員變量的直接訪問(wèn)權(quán)限。
  • 另一方面, 原發(fā)器可以直接與備忘錄對(duì)象進(jìn)行交互, 訪問(wèn)備忘錄類中聲明的成員變量和方法。 這種方式的缺點(diǎn)在于你需要將備忘錄的所有成員變量聲明為公有。

封裝更加嚴(yán)格的實(shí)現(xiàn)

如果你不想讓其他類有任何機(jī)會(huì)通過(guò)備忘錄來(lái)訪問(wèn)原發(fā)器的狀態(tài), 那么還有另一種可用的實(shí)現(xiàn)方式。

  • 這種實(shí)現(xiàn)方式允許存在多種不同類型的原發(fā)器和備忘錄。 每種原發(fā)器都和其相應(yīng)的備忘錄類進(jìn)行交互。 原發(fā)器和備忘錄都不會(huì)將其狀態(tài)暴露給其他類。
  • 負(fù)責(zé)人此時(shí)被明確禁止修改存儲(chǔ)在備忘錄中的狀態(tài)。 但負(fù)責(zé)人類將獨(dú)立于原發(fā)器, 因?yàn)榇藭r(shí)恢復(fù)方法被定義在了備忘錄類中。
  • 每個(gè)備忘錄將與創(chuàng)建了自身的原發(fā)器連接。 原發(fā)器會(huì)將自己及狀態(tài)傳遞給備忘錄的構(gòu)造函數(shù)。 由于這些類之間的緊密聯(lián)系, 只要原發(fā)器定義了合適的設(shè)置器 (setter), 備忘錄就能恢復(fù)其狀態(tài)。

偽代碼

本例結(jié)合使用了命令模式與備忘錄模式, 可保存復(fù)雜文字編輯器的狀態(tài)快照, 并能在需要時(shí)從快照中恢復(fù)之前的狀態(tài)。

保存文字編輯器狀態(tài)的快照。

命令 (command) 對(duì)象將作為負(fù)責(zé)人, 它們會(huì)在執(zhí)行與命令相關(guān)的操作前獲取編輯器的備忘錄。 當(dāng)用戶試圖撤銷最近的命令時(shí), 編輯器可以使用保存在命令中的備忘錄來(lái)將自身回滾到之前的狀態(tài)。

備忘錄類沒(méi)有聲明任何公有的成員變量、 獲取器 (getter) 和設(shè)置器, 因此沒(méi)有對(duì)象可以修改其內(nèi)容。 備忘錄與創(chuàng)建自己的編輯器相連接, 這使得備忘錄能夠通過(guò)編輯器對(duì)象的設(shè)置器傳遞數(shù)據(jù), 恢復(fù)與其相連接的編輯器的狀態(tài)。 由于備忘錄與特定的編輯器對(duì)象相連接, 程序可以使用中心化的撤銷棧實(shí)現(xiàn)對(duì)多個(gè)獨(dú)立編輯器窗口的支持。

// 原發(fā)器中包含了一些可能會(huì)隨時(shí)間變化的重要數(shù)據(jù)。它還定義了在備忘錄中保存
// 自身狀態(tài)的方法,以及從備忘錄中恢復(fù)狀態(tài)的方法。
class Editor is
    private field text, curX, curY, selectionWidth
    method setText(text) is
        this.text = text
    method setCursor(x, y) is
        this.curX = x
        this.curY = y
    method setSelectionWidth(width) is
        this.selectionWidth = width
    // 在備忘錄中保存當(dāng)前的狀態(tài)。
    method createSnapshot():Snapshot is
        // 備忘錄是不可變的對(duì)象;因此原發(fā)器會(huì)將自身狀態(tài)作為參數(shù)傳遞給備忘
        // 錄的構(gòu)造函數(shù)。
        return new Snapshot(this, text, curX, curY, selectionWidth)
// 備忘錄類保存有編輯器的過(guò)往狀態(tài)。
class Snapshot is
    private field editor: Editor
    private field text, curX, curY, selectionWidth
    constructor Snapshot(editor, text, curX, curY, selectionWidth) is
        this.editor = editor
        this.text = text
        this.curX = x
        this.curY = y
        this.selectionWidth = selectionWidth
    // 在某一時(shí)刻,編輯器之前的狀態(tài)可以使用備忘錄對(duì)象來(lái)恢復(fù)。
    method restore() is
        editor.setText(text)
        editor.setCursor(curX, curY)
        editor.setSelectionWidth(selectionWidth)
// 命令對(duì)象可作為負(fù)責(zé)人。在這種情況下,命令會(huì)在修改原發(fā)器狀態(tài)之前獲取一個(gè)
// 備忘錄。當(dāng)需要撤銷時(shí),它會(huì)從備忘錄中恢復(fù)原發(fā)器的狀態(tài)。
class Command is
    private field backup: Snapshot
    method makeBackup() is
        backup = editor.createSnapshot()
    method undo() is
        if (backup != null)
            backup.restore()
    // ……

備忘錄模式適合應(yīng)用場(chǎng)景

當(dāng)你需要?jiǎng)?chuàng)建對(duì)象狀態(tài)快照來(lái)恢復(fù)其之前的狀態(tài)時(shí), 可以使用備忘錄模式。

備忘錄模式允許你復(fù)制對(duì)象中的全部狀態(tài) (包括私有成員變量), 并將其獨(dú)立于對(duì)象進(jìn)行保存。 盡管大部分人因?yàn)?“撤銷” 這個(gè)用例才記得該模式, 但其實(shí)它在處理事務(wù) (比如需要在出現(xiàn)錯(cuò)誤時(shí)回滾一個(gè)操作) 的過(guò)程中也必不可少。

當(dāng)直接訪問(wèn)對(duì)象的成員變量、 獲取器或設(shè)置器將導(dǎo)致封裝被突破時(shí), 可以使用該模式。

備忘錄讓對(duì)象自行負(fù)責(zé)創(chuàng)建其狀態(tài)的快照。 任何其他對(duì)象都不能讀取快照, 這有效地保障了數(shù)據(jù)的安全性。

實(shí)現(xiàn)方式

  • 確定擔(dān)任原發(fā)器角色的類。 重要的是明確程序使用的一個(gè)原發(fā)器中心對(duì)象, 還是多個(gè)較小的對(duì)象。

  • 創(chuàng)建備忘錄類。 逐一聲明對(duì)應(yīng)每個(gè)原發(fā)器成員變量的備忘錄成員變量。

  • 將備忘錄類設(shè)為不可變。 備忘錄只能通過(guò)構(gòu)造函數(shù)一次性接收數(shù)據(jù)。 該類中不能包含設(shè)置器。

  • 如果你所使用的編程語(yǔ)言支持嵌套類, 則可將備忘錄嵌套在原發(fā)器中; 如果不支持, 那么你可從備忘錄類中抽取一個(gè)空接口, 然后讓其他所有對(duì)象通過(guò)接口來(lái)引用備忘錄。 你可在該接口中添加一些元數(shù)據(jù)操作, 但不能暴露原發(fā)器的狀態(tài)。

  • 在原發(fā)器中添加一個(gè)創(chuàng)建備忘錄的方法。 原發(fā)器必須通過(guò)備忘錄構(gòu)造函數(shù)的一個(gè)或多個(gè)實(shí)際參數(shù)來(lái)將自身狀態(tài)傳遞給備忘錄。

    該方法返回結(jié)果的類型必須是你在上一步中抽取的接口 (如果你已經(jīng)抽取了)。 實(shí)際上, 創(chuàng)建備忘錄的方法必須直接與備忘錄類進(jìn)行交互。

  • 在原發(fā)器類中添加一個(gè)用于恢復(fù)自身狀態(tài)的方法。 該方法接受備忘錄對(duì)象作為參數(shù)。 如果你在之前的步驟中抽取了接口, 那么可將接口作為參數(shù)的類型。 在這種情況下, 你需要將輸入對(duì)象強(qiáng)制轉(zhuǎn)換為備忘錄, 因?yàn)樵l(fā)器需要擁有對(duì)該對(duì)象的完全訪問(wèn)權(quán)限。

  • 無(wú)論負(fù)責(zé)人是命令對(duì)象、 歷史記錄或其他完全不同的東西, 它都必須要知道何時(shí)向原發(fā)器請(qǐng)求新的備忘錄、 如何存儲(chǔ)備忘錄以及何時(shí)使用特定備忘錄來(lái)對(duì)原發(fā)器進(jìn)行恢復(fù)。

  • 負(fù)責(zé)人與原發(fā)器之間的連接可以移動(dòng)到備忘錄類中。 在本例中, 每個(gè)備忘錄都必須與創(chuàng)建自己的原發(fā)器相連接。 恢復(fù)方法也可以移動(dòng)到備忘錄類中, 但只有當(dāng)備忘錄類嵌套在原發(fā)器中, 或者原發(fā)器類提供了足夠多的設(shè)置器并可對(duì)其狀態(tài)進(jìn)行重寫(xiě)時(shí), 這種方式才能實(shí)現(xiàn)。

備忘錄模式優(yōu)缺點(diǎn)

  • 你可以在不破壞對(duì)象封裝情況的前提下創(chuàng)建對(duì)象狀態(tài)快照。

  • 你可以通過(guò)讓負(fù)責(zé)人維護(hù)原發(fā)器狀態(tài)歷史記錄來(lái)簡(jiǎn)化原發(fā)器代碼。

  • 如果客戶端過(guò)于頻繁地創(chuàng)建備忘錄, 程序?qū)⑾拇罅績(jī)?nèi)存。

  • 負(fù)責(zé)人必須完整跟蹤原發(fā)器的生命周期, 這樣才能銷毀棄用的備忘錄。

  • 絕大部分動(dòng)態(tài)編程語(yǔ)言 (例如 PHP、 Python 和 JavaScript) 不能確保備忘錄中的狀態(tài)不被修改。

代碼示例

Go設(shè)計(jì)模式之備忘錄模式講解和代碼示例_Golang_腳本之家 (jb51.net)

以上就是Go設(shè)計(jì)模式之備忘錄模式圖文詳解的詳細(xì)內(nèi)容,更多關(guān)于Go備忘錄模式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go語(yǔ)言并發(fā)編程 sync.Once

    Go語(yǔ)言并發(fā)編程 sync.Once

    這篇文章要介紹的是Go語(yǔ)言并發(fā)編程 sync.Once,sync.Once用于保證某個(gè)動(dòng)作只被執(zhí)行一次,可用于單例模式中,下面文章我們來(lái)介紹一下它的使用方法,需要的朋友可以參考一下
    2021-10-10
  • golang接口IP限流,IP黑名單,IP白名單的實(shí)例

    golang接口IP限流,IP黑名單,IP白名單的實(shí)例

    這篇文章主要介紹了golang接口IP限流,IP黑名單,IP白名單的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go語(yǔ)言基于Goroutine的超時(shí)控制方案設(shè)計(jì)與實(shí)踐

    Go語(yǔ)言基于Goroutine的超時(shí)控制方案設(shè)計(jì)與實(shí)踐

    Go語(yǔ)言因其并發(fā)特性而備受青睞,尤其是goroutine和channel的組合,像一對(duì)默契的搭檔,為開(kāi)發(fā)者提供了輕量、高效的并發(fā)工具,下面我們來(lái)看看基于goroutine的超時(shí)控制方案吧
    2025-05-05
  • 解決Goland 提示 Unresolved reference 錯(cuò)誤的問(wèn)題

    解決Goland 提示 Unresolved reference 錯(cuò)誤的問(wèn)題

    這篇文章主要介紹了解決Goland 提示 Unresolved reference 錯(cuò)誤的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go?函數(shù)中獲取調(diào)用者的函數(shù)名和文件名及行號(hào)

    Go?函數(shù)中獲取調(diào)用者的函數(shù)名和文件名及行號(hào)

    這篇文章主要介紹了Go?函數(shù)中獲取調(diào)用者的函數(shù)名和文件名及行號(hào),文章圍主題詳細(xì)內(nèi)容展開(kāi)相關(guān)介紹,感興趣的小伙伴可以參考一下
    2022-05-05
  • Go 通過(guò)結(jié)構(gòu)struct實(shí)現(xiàn)接口interface的問(wèn)題

    Go 通過(guò)結(jié)構(gòu)struct實(shí)現(xiàn)接口interface的問(wèn)題

    這篇文章主要介紹了Go 通過(guò)結(jié)構(gòu)struct實(shí)現(xiàn)接口interface的問(wèn)題,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • Golang?鎖原理的簡(jiǎn)單實(shí)現(xiàn)

    Golang?鎖原理的簡(jiǎn)單實(shí)現(xiàn)

    本文主要介紹了Golang?鎖原理的簡(jiǎn)單實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • go-zero?rpc分布式微服務(wù)使用詳解

    go-zero?rpc分布式微服務(wù)使用詳解

    文章介紹了如何安裝Go環(huán)境、配置Go環(huán)境、安裝goctl工具以及創(chuàng)建第一個(gè)項(xiàng)目,詳細(xì)的步驟包括生成項(xiàng)目、配置文件、啟動(dòng)服務(wù)、測(cè)試項(xiàng)目等,文章還涵蓋了Go?Zero框架的基本概念,如API定義、服務(wù)間通信、業(yè)務(wù)邏輯實(shí)現(xiàn)等
    2026-01-01
  • Golang的md5 hash計(jì)算操作

    Golang的md5 hash計(jì)算操作

    這篇文章主要介紹了Golang的md5 hash計(jì)算操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go語(yǔ)言如何獲取網(wǎng)卡信息

    Go語(yǔ)言如何獲取網(wǎng)卡信息

    Go語(yǔ)言中net和pcap包提供網(wǎng)絡(luò)接口信息獲取函數(shù),如Interfaces()和FindAllDevs(),通過(guò)匹配IP地址關(guān)聯(lián)不同接口數(shù)據(jù),用于網(wǎng)絡(luò)監(jiān)控與分析
    2025-07-07

最新評(píng)論

将乐县| 德清县| 南宁市| 康乐县| 沁水县| 平和县| 襄垣县| 抚松县| 田阳县| 阜新市| 汶上县| 宿迁市| 多伦县| 遂川县| 建瓯市| 新建县| 沁水县| 武功县| 洮南市| 白城市| 师宗县| 济南市| 台湾省| 潮州市| 荆州市| 徐水县| 崇信县| 祁阳县| 宜兴市| 若羌县| 鄄城县| 武平县| 专栏| 望谟县| 垫江县| 福泉市| 大竹县| 凌海市| 奉新县| 镇康县| 三门县|