二 18 設計模式 之迭代器模式

2021-10-07 15:50:30 字數 2079 閱讀 7477

今天的部落格主題

設計模式 ——》 設計模式之迭代器模式

將乙個請求封裝成乙個物件,使不同的請求把客戶端引數化。

命令模式是對命令的封裝,每乙個命令都對應了乙個操作:請求方發出命令,接收方執行命令對應的操作。主要是解耦了請求方和接收方,請求方只需關心請求執行的命令,而不關心命令怎麼被接收以被處理的。

現在寫出的**都是請求者與實現者通常都是一種緊耦合的關係,這樣更簡單明瞭,但缺乏擴充套件性。不適合在某些場合使用(行為記錄,撤銷等)。命令模式可以通過請求與實現中間引入乙個抽象的命令介面,解耦了請求與實現,中間也是抽象的,可以有不同的子類,擴充套件性好。

命令模式其主要本質是解耦命令的請求與處理。

其精髓是把行為封裝成物件!!!

1)語義中具備命令的操作(如shell命令,命令選單)。

2)呼叫方與接收方需要解耦,不直接互動。

3)需要抽象出等待的行為,比如撤銷(undo)和恢復(redo)等操作。

4)支援命令組合操作。

5)1)通過引入抽象介面,可以很好的解耦命令請求與實現。

2)擴充套件性良好,可以很方便的新增命令。

3)支援組合命令,支援命令佇列。

4)可在現有命令的基礎上,增加額外功能

5)1)具體的命令類可能過多。

2)增加**理解難度(解耦請求與實現,引入額外型別結構)

3)

public inte***ce runnable
runnable 相當於乙個命令的抽象,實現了該抽象的介面都被認為乙個執行緒。呼叫執行緒的 start() 方法之後才有資格獲取 cpu 資源,不需要我們來實現去獲取 cpu 資源的邏輯。在搶到 cpu 資源之後,執行 run() 方法中的內容。可以發現 runnable 介面把使用者請求和cpu執行進行了解耦。

命令模式主要包含四種角色

接收者角色(receiver):負責實施執行乙個請求,也就是具體的命令實現。

抽象命令角色(command):定義需要執行的所有命令。

請求者角色(invoker):接收客戶端命令,並執行命令,維護抽象命令角色。

/**

* 場景:遊戲裡的人物進行移動,發出命令,人物做出相應的動作(w前進s後退a左移d右移)

* 人物攻擊同樣是發出命令,人物做出響應的動作(q獄血魔神e噬魂r大鬧天宮) 【請自行實現呦】

*/// 抽象命令類,只有實現了抽象命令類的具體命令才與請求者關聯。最簡單的抽象命令類中只包含了乙個抽象的execute()方法

inte***ce command

// 具體命令類

class moveforwardconcretecommand implements command

@override

public void execute()

}class movebackoffconcretecommand implements command

@override

public void execute()

}class moveleftcommandconcretecommand implements command

@override

public void execute()

}class moverightcommandconcretecommand implements command

@override

public void execute()

}// 請求的接收者,也就是具體的命令實現

class moveforwardreceiver

}class movebackoffreceiver

}class moveleftreceiver

}class moverightreceiver

}// 請求傳送者

class invoker

public void call()

}// 客戶端呼叫

public class commandpatternsample

}scan.close();

}}

設計模式之迭代器模式

概念 提供一種方法順序訪問乙個聚合物件中各個元素,而又不需暴露該物件的內部表示。main 客戶 iproject,產品介面 cproject,產品類 iiterator,迭代器介面 iprojectiterator,產品迭代器介面 cprojectiterator,產品迭代器實現類 說明 cproj...

設計模式之迭代器模式

當你需要訪問乙個聚集物件,而且不管這些物件是什麼都需要遍歷的時候,而且可能對聚集有多種方式遍歷時,需要為遍歷不同的聚集結構提供如開始,下乙個,是否結束,當前哪一項等 統一介面,你就應該考慮用迭代器模式.提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露該物件的內部表示.uml設計圖 部分 ite...

設計模式之迭代器模式

說起迭代器,大家一定不陌生,經常使用的foreach in 這種迴圈就是,c 語言已經內建化了迭代器模式,主要是支援對非泛型集合的簡單迭代介面ieumerator和公開列舉數ienumerable。雖然內建了,但是這種模式也有我們學習的必要性。如下 using system using system...