今天的部落格主題
設計模式 ——》 設計模式之迭代器模式
將乙個請求封裝成乙個物件,使不同的請求把客戶端引數化。
命令模式是對命令的封裝,每乙個命令都對應了乙個操作:請求方發出命令,接收方執行命令對應的操作。主要是解耦了請求方和接收方,請求方只需關心請求執行的命令,而不關心命令怎麼被接收以被處理的。
現在寫出的**都是請求者與實現者通常都是一種緊耦合的關係,這樣更簡單明瞭,但缺乏擴充套件性。不適合在某些場合使用(行為記錄,撤銷等)。命令模式可以通過請求與實現中間引入乙個抽象的命令介面,解耦了請求與實現,中間也是抽象的,可以有不同的子類,擴充套件性好。
命令模式其主要本質是解耦命令的請求與處理。
其精髓是把行為封裝成物件!!!
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...