国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

第6章:可維護性軟件構建方法 6.2可維護性設計模式

VioletJack / 1857人閱讀

摘要:抽象工廠模式將具有共同主題的對象工廠分組。對可重用性和可維護性設計模式的高層考慮創造性模式工廠方法模式也稱為虛擬構造器意圖定義一個用于創建對象的接口,但讓子類決定實例化哪個類。

大綱

創造性模式

工廠方法模式創建對象而不指定要創建的確切類。

抽象工廠模式將具有共同主題的對象工廠分組。

Builder模式通過分離構造和表示來構造復雜的對象。

結構模式

Bridge將抽象從其實現中分離出來,這樣兩者可以獨立變化。

代理提供另一個對象的占位符來控制訪問,降低成本并降低復雜性。

復合材料組成零個或多個相似的對象,以便它們可以作為一個對象進行操作。

*行為模式

中介者可以通過成為唯一具有其方法詳細知識的課程,從而實現課堂間的松散耦合。

Observer是一種發布/訂閱模式,它允許許多觀察者對象查看事件。

訪問者通過將方法的層次結構移動到一個對象中來將算法從對象結構中分離出來。

責任鏈將命令委托給一系列處理對象。

命令創建封裝動作和參數的對象。

對可重用性和可維護性設計模式的高層考慮

創造性模式 (1) Factory Method pattern

工廠方法模式
也稱為“虛擬構造器”

意圖:

定義一個用于創建對象的接口,但讓子類決定實例化哪個類。

工廠方法讓類將實例化推遲到子類。

什么時候應該使用工廠方法? ----當一個類:

無法預測它需要創建的對象的類別

希望它的子類指定它創建的對象

將責任委托給多個幫助者子類中的一個,并且您需要本地化哪些幫助者是委托人的知識。

當客戶不知道要創建哪個具體類的實例,或者不想在客戶代碼中指明具體創建的實例時,用工廠方法。定義一個用于創建對象的接口,讓其子類來決定實例化哪一個類 ,從而使一個類的實例化延遲到其子類。

優點:

消除了將特定于應用程序的類綁定到代碼的需要。

代碼只處理產品接口(Trace),因此它可以與任何用戶定義的ConcreteProduct(FileTrace,SystemTrace)

潛在的缺點

客戶可能必須創建Creator的子類,以便他們可以創建某個ConcreteProduct。

如果客戶無論如何都要繼承創造者的話,這是可以接受的,但如果不是,那么客戶必須處理另一個進化點。

Open-Closed Principle(OCP) - 對擴展的開放,對修改已有代碼的封閉

(2) Abstract Factory

抽象工廠模式

示例1:考慮一個用戶界面工具包,它支持不同操作系統的多個外觀和感覺標準:一個UI,包含多個窗口控件,這些控件在不同的OS中實現不同

如何編寫單個用戶界面,并使這些界面在這些窗口管理器的不同外觀和感覺標準之間移植?

示例2:考慮支持不同控制系統的智能住宅的設施管理系統:一個倉庫類,要控制多個設備,這些設備的制造商各有不同,控制接口有差異

如何編寫獨立于制造商的單個控制系統?

抽象工廠模式:提供接口以創建一組相關/相互依賴的對象,但不需要指明其具體類。

名稱:抽象工廠(或工具包)
意圖:允許獨立于實現創建相關對象的家族
方法:使用工廠返回可用于創建相關對象集的工廠。

適用性

獨立于初始化或表示的不同系列組件(產品)

必須以互斥和一致的方式使用

隱藏來自客戶的多個家庭的存在

制造商獨立

應對即將到來的變化

筆記

Abstract Factory創建的不是一個完整產品,而是“遵循固定搭配規則的多類產品的實例”,得到的結果是:多個不同產品的對象,各產品創建過程對客戶可見,但“搭配”不能改變。
本質上,Abstract Factory是把多類產品的工廠方法組合在一起

例如

GraphPoet由Word列表和WordNeighborhood列表組成
NetworkTopology由計算機/服務器/路由器列表和NetworkConnection列表組成
換句話說,Vertex和Edge的對象創建密切相關,但不應該是獨立的。 Vertex和Edge的子類,要有固定搭配,不能隨意組合

抽象工廠vs工廠方法

工廠方法僅用于創建一個產品,但抽象工廠用于創建相關或依賴產品系列。

創建一個對象vs創建多個類型的對象

工廠方法模式向客戶端公開創建對象的方法,而抽象工廠則顯示由這些工廠方法組成的一系列相關對象。

一個工廠方法vs多個工廠方法

抽象工廠模式使用組合來將創建對象的責任委派給另一個類,而工廠方法模式使用繼承并依賴于派生類或子類來創建對象。

使用組合/委派vs使用繼承/子類型

(3) Builder

構造器模式

構造器模式:將復雜對象的構造與其表示分開,以便相同的構建過程可以創建不同的表示。創建復雜對象,包含多個組成部分

復雜對象的構建在多個表示中很常見

示例:將文檔轉換為多種不同的格式

寫出文件的步驟是相同的

每一步的細節取決于格式

就像你在麥當勞點餐一樣!

途徑

構建算法由單個類(“導演”)指定

算法的抽象步驟(每個部分一個)由接口(“構造器”)指定

每個表示都提供了界面的具體實現(“實際構造者”)

注意:客戶端要的不是一堆零散的對象(抽象工廠那樣的結果),而是一個完整的產品,客戶端不關心其中的細節組成部分是什么,如何創建

比較:抽象工廠vs構造器

Abstract Factory創建的不是一個完整產品,而是“遵循固定搭配規則的多類產品實例”,得到的結果是:多個不同產品的實例對象,各產品創建過程對客戶可見,但“搭配”不能改變。

專注于產品系列(類似的產品類型)

不隱藏構造過程

Builder創建的是一個完整的產品,有多個部分組成,客戶不需要了解每個部分是怎么創建,各個部分怎么組合,最終得到一個產品的完整對象

基礎產品需要構建為系統的一部分,但創建非常復雜(產品組合)

復雜產品的構造會不時變化

隱藏用戶的創建過程

抽象工廠和構造器可以很好地協同工作,適用于多種復雜產品系列

例如

GraphPoet由Word列表和WordNeighborhood列表組成
NetworkTopology由計算機/服務器/路由器列表和NetworkConnection列表組成
換句話說,ConcreteGraph的對象創建由Vertex和Edge子類型的對象創建組成。 四個圖應用都要創建圖對象,要為不同應用建立出不同的頂點列表和邊列表。

比較:模板方法vs構造器

模板方法:行為模式,目標是為了復用算法的公共結構(次序)

定義了一個操作中算法的骨架(步),而將具體步驟的實現延遲到子類中,從而復用算法的結構并可重新定義算法的某些特定步驟的實現邏輯。

復用算法骨架,強調步驟的次序 - 子類override算法步驟

Builder:一種創造模式,目標是“創建復雜對象”,靈活擴展

將一個復雜對象的構造方法與對象內部的具體表示分離出來,同樣的構造方法可以建立不同的表現。

不強調復雜對象內部各部分的“次序”

子類override復雜對象內部各部分的“創建”

適應變化:通過派生新的builder來構造新的對象(即新的內部表示),OCP

結構模式 (1) Bridge

橋接模式

適用性

用不同的實現去耦合抽象概念

實施可能會在運行時切換

實施變更不應影響客戶

從客戶端隱藏類的界面

結構:使用兩個層次結構

適合客戶的邏輯

為不同的實現物理一個

對象:提高可擴展性

邏輯類和物理類獨立變化

隱藏來自客戶的實施細節

橋接模式是OOP最基本的結構模式,通過委托+繼承建立兩個具體類之間的關系(DIP依賴轉置,抽象依賴于抽象)

橋接模式與策略模式

橋接:結構模式,強調雙方的運行時委派連接

結構模式表明對象組成或關聯或繼承以形成更大對象的方式,即它們關注對象組成。

一個類A的對象中有其他類B的對象作為其組成部分,但A的對象具體綁定到B的哪個具體子類的實現?在運行時通過委托加以組合,并永久保存這種代理關系。

它將抽象和實現分離開來,并允許兩者獨立地變化。

策略:行為模式,強調一方運行時使用另一方的“算法”

行為模式處理算法或業務邏輯(而不是對象創建本身),即它們專注于對象之間的協作。

它使您能夠在運行時在一系列算法中切換多種算法。

“算法”通常實現為“類的某個方法”的形式,策略模式的目的并非在“調用算法的類”與“被調用算法所在的類”之間建立起永久聯系,而只是幫助前者臨時使用后者中的“算法”,前者無需永久保存后者的實例。

策略:使用螺絲刀的時候,針對不同的工作任務,選取不同的“刀頭”,但目的并非將螺絲刀與刀頭組合起來建立永久的團隊,而只是臨時通過委派完成任務(即調用刀頭的“算法”),然后二者再無聯系。

橋接:類A需要完成“通訊”功能,它有一個組成部分Device類,這是個抽象接口(模式中的實現者),有多種實現方式(PC,tablet,phone,即ConcreteImplementor),該模式在運行時為類A的具體子類型實例設定具體的Device的具體實現(強調對A和Device兩個抽象類的各自實例之間如何建立委托),進而在其他各項功能中利用其通訊功能(這不再是橋接模式關注的目標)。

(2) Proxy

代理模式

代理模式動機

目標:

防止客戶直接訪問對象

通過充當傳遞實體或占位符對象來允許進行對象級訪問控制。

解決方案:

使用一個稱為代理的附加對象

客戶端只能通過代理訪問受保護的對象

代理跟蹤受保護對象的狀態和/或位置

某個對象比較“敏感”/“私密”/“貴重”,不希望被客戶端直接訪問到,故設置代理,在二者之間建立防火墻。

代理模式:3種類型

信息緩存(“遠程代理”)

代理對象是不同地址空間中對象的本地代理

如果信息沒有經常變化,那么很好

Standin(“虛擬代理”)

對象創建成本太高或者下載成本太高。

如果真正的對象不被太頻繁地訪問,那么很好

訪問控制(“保護代理”)

代理對象為真實對象提供保護

好的時候,不同的演員應該對同一個對象有不同的訪問和查看權限

示例:管理員,教師和學生訪問的成績信息。

代理與適配器

適配器:結構模式,目的是將類/庫A的接口更改為客戶端B的期望。
目的:消除不兼容,目的是B以客戶端期望的統一的方式與A建立起聯系。

典型的實現是一個包裝類或一組類。

目的不是為了方便將來的界面更改,而是當前的界面不兼容。

代理:行為模式,也使用包裝類,但其目的是為實際資源創建一個替身。
目的:隔離對復雜對象的訪問,降低難度/代價,定位在“訪問/使用行為”

真正的資源駐留在遠程計算機上(代理方便與遠程資源的交互)

真正的資源創建成本很高(代理確保成本不會發生,除非/直到真正需要)

代理提供了替代它所代表的真實資源的插入替代品,因此它必須提供相同的接口。

3) Composite

組合模式

問題:

應用程序需要操作“原始”和“復合”對象的分層集合。

原始對象的處理是單向處理的,處理復合對象的處理方式不同。

在嘗試處理每個對象之前必須查詢每個對象的“類型”是不可取的。

意圖:將對象組成樹結構以表示整體部分層次結構。

組合模式讓客戶可以統一處理單個物體和物體的組合。

遞歸組合

“目錄包含條目,每個條目都可以是目錄。”

一對多“has a”之上“is a”層次

組合策略

包含菜單項的菜單,每個菜單項都可以是菜單。
包含小部件的行列GUI布局管理器,每個小部件都可以是行列GUI布局管理器。
包含文件的目錄,每個文件都可以是一個目錄。
包含元素的容器,其中每個容器都可以是容器。
樹結構

復合vs裝飾器

復合:結構模式,允許您以允許外部代碼將整個結構視為單個實體的方式構建分層結構(樹)。目的是在同類型的對象之間建立起樹型層次結構,一個上層對象可包含多個下層對象

葉實體的接口與復合實體的實體完全相同。

復合結構中的所有元素都具有相同的界面,即使有些元素是葉節點,而其他元素是整個結構。

裝飾器:結構模式,也允許一個實體完全包含另一個實體,以便使用裝飾器看起來與包含的實體相同。強調的是同類型對象之間的“特性增加”問題,它們之間是平等的,區別在于“擁有特性”的多少,每次裝飾只能作用于一個對象。

這允許修飾器修改其封裝的行為或內容,而不改變實體的外觀。

行為模式 (1) Observer

觀察者模式

問題:依賴的狀態必須與主人的狀態一致

解決方案:定義四種對象:

摘要主題:保留家屬名單; 當主人更改時通知他們

抽象觀察者:定義更新依賴者的協議

具體主題:為受撫養人管理數據; 當主人更改時通知他們

具體的觀察者:在收到更新消息后獲得新的主體狀態

“粉絲”對“偶像”感興趣,希望隨時得知偶像的一舉一動
粉絲到偶像那里注冊,偶像一旦有新聞發生,就推送給已注冊的粉絲(回調粉絲的特定功能)

建模對象之間的一對多依賴關系

連接觀察對象的狀態,主體與許多觀察對象,觀察者

用法:

保持冗余狀態的一致性

優化一批更改以保持一致性

保持一致性的三個變體:

推送通知:每當主題狀態改變時,所有觀察者都會收到通知

推送更新通知:主題還將已更改的狀態發送給觀察者

拉通知:觀察者詢問對象的狀態

也稱為發布 - 訂閱(Publish-ubscribe)。

優點:

主體和觀察者之間的低耦合:主體不知道家屬

支持廣播:動態添加和刪除觀察員

意外更新:由觀察者在計算上不受主題的控制

實施問題

存儲觀察員列表:通常在主題中

觀察多個主題:通常將參數添加到update()

誰觸發更新:主體的狀態設置操作

(2) Visitor

訪客模式

訪問者模式:允許在運行時將一個或多個操作應用于一組對象,將操作與對象結構分離。 對特定類型的對象的特定操作(訪問),在運行時將二者動態綁定到一起,該操作可以靈活更改,無需更改被訪問的類

Visitor模式實際上做的是創建一個使用其他類中的數據的外部類。

如果操作邏輯改變了,那么我們只需要在訪問者實現中進行更改,而不是在所有項目類中進行更改。

本質上:將數據和作用于數據上的某種/些特定操作分離開來。

訪客與迭代器

迭代器:行為模式,用于順序訪問聚集,而不暴露其基礎表示。 所以你可以在一個Iterator后面隱藏一個List或數組或類似的聚合。
迭代器:以遍歷的方式訪問集合數據而無需暴露其內部表示,將“遍歷”這項功能委托到外部的迭代器對象。

訪問者:行為模式,用于對元素結構執行操作而不改變元素本身的實現。
在特定ADT上執行某種特定操作,但該操作不在ADT內部實現,而是委托到獨立的訪客對象,客戶端可靈活擴展/改變訪問者的操作算法,而不影響ADT

策略vs訪客

訪客:行為模式
策略:行為模式

二者都是通過授權建立兩個對象的動態聯系

但是Visitor強調是的外部定義某種對ADT的操作,該操作于ADT自身關系不大(只是訪問ADT),故ADT內部只需要開放accept 訪客)即可,客戶端通過它設定訪客操作并在外部調用。

而策略是強調是對ADT內部某些要實現的功能的相應算法的靈活替換。這些算法是ADT功能的重要組成部分,只不過是委托到外部戰略類而已。

區別:訪客是站在外部客戶的角度,靈活增加對ADT的各種不同操作(哪怕ADT沒實現該操作),策略是站在內部ADT的角度,靈活變化對其內部功能的不同配置。

(3) Mediator

中介模式

使用中央控制器是中介模式的關鍵方面。

機場控制塔照看可以起飛的航班,并且所有的通信都是從飛機到控制塔完成的,而不是進行飛機與飛機之間的通信。 多個對象之間要進行交互,不是直接交互,而是通過mediator,實現消息的廣播,從而將對象之間松散耦合,利于變化

通過封裝不同對象集相互交互和通信的方式,允許松耦合。

允許每個對象的操作彼此獨立地變化。

觀察者模式與中介模式

觀察者模式:定義對象之間的一對多依賴關系,以便當一個對象改變狀態時,它的所有依賴項都會被自動通知和更新。
一組對象對另一個對象B的狀態變化感興趣(1對多),所以對其進行觀察.B維持著一個對自己感興趣的對象列表,一旦自己發生變化,就通知這些對象。并不對等,一方只是“通知”,另一方接到通知后執行特定行為。

中介模式:定義一個封裝一組對象如何交互的對象。介體通過讓對象明確地互相引用來促進松散耦合,并且可以讓您獨立地改變它們的相互作用。
一組同類型的對象,彼此之間相互發/收消息(多對多),不存在誰觀察誰的問題,所有對象都對等。每個對象都維持一個中介,將通訊的任務委托給它,自己只負責發送和接收即可,無需了解其他物體,實現了“解耦”。

觀察者模式:自己來廣播,其他對象接收;
中介模式:第三方中介負責廣播(類似于“郵件列表”)。

(4) Command

命令

意圖

將請求封裝為一個對象,從而讓您用不同的請求參數化客戶端,排隊或記錄請求,并支持可撤銷操作。

將“指令”封裝為對象,指令的所有細節對客戶隱藏,在指令內對具體的ADT發出動作(調用ADT的細節操作)

將“調用對象的方法”提升為完全對象狀態

面向對象的回調

問題

需要向對象發出請求,而不知道請求的操作或請求的接收者。

客戶端希望執行指令,但不想知道指令的細節,也不想知道指令的具體作用對象

命令將調用操作的對象與知道如何執行操作的對象分離。

為了實現這種分離,設計人員創建了一個抽象基類,它將接收者(對象)與動作(指向成員函數的指針)進行映射。 基類包含一個execute()方法,它只是簡單地調用接收方的動作。

每當客戶端需要對象的“服務”時,Command對象的所有客戶端都通過簡單地調用對象的虛擬execute()方法將每個對象視為“黑盒子”。
將所有對客戶提供的指令與內部執行的ADT操作徹底分開,指令對外看來是“黑盒” - 進一步“變本加厲”的封裝!

一個Command類包含以下的一些子集:

一個對象,一個應用于該對象的方法,以及該方法應用時傳遞的參數。

命令的“執行”方法會導致碎片聚集在一起。

外觀與命令

外觀:結構模式
命令:行為模式

均強調對某個復雜系統內部提供的功能的“封裝”,對外提供簡單的調用接口,簡化客戶端的使用,“隱藏”細節。
命令:強調將指令封裝為了“對象”,提供了統一的對外接口(執行)。
外觀:沒有顯式的“對象”,仍然通過類的方法加以調用。

(5) Chain of responsibility

責任鏈模式

問題

可能有多個“處理程序”或“處理元素”或“節點”對象,以及必須處理的請求流。

針對一個請求,可能有多個處理模塊

需要高效地處理請求,而無需硬連線處理程序關系和優先級或請求到處理程序映射。

各種不確定情況存在,不能以“硬編碼”的方式指明按何種次序調用處理模塊
意圖

通過給予多個對象機會來處理請求,避免將請求的發送者耦合到它的接收者。

鏈接接收對象并沿著鏈傳遞請求,直到對象處理它為止。 使用包含許多可能的處理程序的單個處理管道啟動和離開請求。 具有遞歸遍歷的面向對象的鏈表。

避免在請求方和各處理者之間的緊耦合:構造流水線,請求在其上傳,直到被處理為止。

將處理元素封裝在“管道”抽象中; 并讓客戶在管道入口處“啟動并離開”他們的請求。
客戶端只需在流水線的入口發出請求即可,請求自動在流水線上傳遞,直到被處理。

該模式將接收對象鏈接在一起,然后將任何請求消息從對象傳遞到對象,直到它到達能夠處理消息的對象。

處理程序對象的數量和類型事先是未知的,它們可以動態配置。

處理器對象的數據和類型事先都不確定,需要動態配置

鏈接機制使用遞歸組合來允許無限數量的處理程序進行鏈接。

使用遞歸組合的方式,將多個處理程序連成“職責鏈”
責任鏈簡化了對象互連。

發件人和收件人不是保留對所有候選收件人的引用,而是每個發件人對鏈的頭部保持一個單一的引用,并且每個收件人對鏈中的其直接后繼者保持單一引用。

請求的發起者無需維護所有可能的處理程序對象,只需記錄職責鏈的入口;每個處理程序只需要維護“下一個”處理程序即可,從而簡化了各個處理程序之間的連接關系。

訪客與責任鏈

不是像傳統類設計中將操作與數據捆綁在一起形成ADT,這兩個設計模式都是將“數據”與“作用于數據上的客戶端定制操作”分離開來
原因:操作可以靈活增加,運行時使用的操作可以動態配置,多個操作的執行次序可以動態變化

區別1:visitor只定義了一個操作,chain of responsibility定義了一組操作及其之間的次序
區別2:訪客中,客戶創建訪客之后傳入ADT,ADT再將執行權委托到visitor;責任鏈中,控制權完全在各個處理程序之間流轉,ADT(請求對象)完全感受不到。

可重用性和可維護性設計模式的高層考慮 使用設計模式的線索(1)

文本:“獨立于制造商”,“獨立于設備”,“必須支持一系列產品”
=>抽象工廠模式
文本:“必須與現有對象接口”
=>適配器模式
文本:“必須與多個系統接口,其中一些系統將在未來開發”,“必須展示早期的原型”
=>橋模式
文本:“必須與現有的一組對象接口”
=>外墻模式

使用設計模式的線索(2)

文本:“復雜結構”,“必須具有可變的深度和寬度”
=>復合模式
文本:“必須是位置透明的”
=>代理模式
文本:“必須可擴展”,“必須可擴展”
=>觀察者模式
文本:“必須提供獨立于該機制的政策”
=>策略模式

總結

組合,適配器,橋接,包裝,代理(結構模式)

重點:組成物體形成更大的結構
?從舊功能中實現新功能,
?提供靈活性和可擴展性

命令,觀察者,策略,模板(行為模式)

重點:算法和對象的責任分配
?避免與特定解決方案緊密耦合

抽象工廠,生成器(創造性模式)

重點:創建復雜的對象
?隱藏復雜對象的創建和組合

總結

創造性模式

工廠方法,抽象工廠,Builder

結構模式

橋接,代理,復合

行為模式

中介,觀察員,訪問者,責任鏈,命令

對可重用性和可維護性設計模式的高層考慮

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71345.html

相關文章

  • 6可維護性軟件構建方法 6.1可維護性的度量和構造原則

    摘要:設計方案的容易改變這就是所謂的軟件構建的可維護性,可擴展性和靈活性。這也可能表明類型或方法可能難以維護。基于源代碼中不同運算符和操作數的數量的合成度量。對修改的封閉這種模塊的源代碼是不可侵犯的。 大綱 軟件維護和演變可維護性度量模塊化設計和模塊化原則OO設計原則:SOLIDOO設計原則:GRASP總結 軟件維護和演變 什么是軟件維護? 軟件工程中的軟件維護是交付后修改軟件產品以糾正故障...

    chanjarster 評論0 收藏0
  • 6可維護性軟件構建方法 6.3可維護性構建技術

    摘要:遵循特定規則,利用操作符,終止節點和其他非終止節點,構造新的字符串非終結符是表示字符串的樹的內部節點。語法中的生產具有這種形式非終結符終結,非終結符和運算符的表達式語法的非終結點之一被指定為根。 大綱 基于狀態的構建 基于自動機的編程 設計模式:Memento提供了將對象恢復到之前狀態的功能(撤消)。 設計模式:狀態允許對象在其內部狀態改變時改變其行為。 表驅動結構* 基于語法的構...

    young.li 評論0 收藏0
  • 5:可復用性的軟件構建方法 5.1可復用性的度量,形態和外部觀察

    摘要:大綱什么是軟件復用如何衡量可復用性可復用組件的級別和形態源代碼級別復用模塊級別的復用類抽象類接口庫級別的復用包系統級別的復用框架對可復用性的外部觀察類型變化例行分組實施變更代表獨立分解常見行為總結什么是軟件復用軟件復用軟件復用是使用現有軟件 大綱 什么是軟件復用?如何衡量可復用性?可復用組件的級別和形態 源代碼級別復用 模塊級別的復用:類/抽象類/接口 庫級別的復用:API /包 系...

    mengera88 評論0 收藏0
  • 5:可重用性的軟件構建方法 5.3面向復用的設計模式

    摘要:共性的步驟在抽象類內公共實現,差異化的步驟在各個子類中實現子類為每個步驟提供不同的實現。模板方法將算法的骨架定義為抽象類,允許其子類提供具體行為。迭代器依次訪問對象的元素而不暴露其基礎表示。 大綱 結構模式 Adapter允許具有不兼容接口的類通過將自己的接口包裝到已有類的接口中來一起工作。 Decorator動態添加/覆蓋對象的現有方法中的行為。 Facade為大量代碼提供簡化的界...

    superPershing 評論0 收藏0
  • Kali Linux安全測試(177講全) 安全牛苑房宏

    摘要:安全測試講全安全牛苑房宏是基于的發行版,設計用于數字取證操作系統。 Kali Linux安全測試(177講全) 安全牛苑房宏 Kali Linux是基于Debian的Linux發行版, 設計用于數字取證操作系統。由Offensive Security Ltd維護和資助。最先由Offensiv...

    gself 評論0 收藏0

發表評論

0條評論

VioletJack

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<