《Head First设计模式》 读书笔记16 其余的模式(二) 蝇量 解释器 中介者
?
《Head First設計模式》 讀書筆記16 其余的模式(二) 蠅量 解釋器 中介者
?
蠅量(Flyweight Pattern)
如想讓某個類的一個實例能用來提供許多“虛擬實例”,就使用蠅量模式(Flyweight Pattern) 。
例子場景:景觀設計中的樹。
只用一個樹實例和一個客戶對象來維護所有的樹的狀態。
?
?
?
優點:
減少運行時對象實例的個數,節省內存。
將許多“虛擬”對象的狀態集中管理。
用途:
當一個類有許多的實例,而這些實例能被同一方法控制的時候,我們就可以使用蠅量模式。
缺點:
蠅量模式的缺點在于,一旦你實現了它,那么單個的邏輯實例將無法擁有獨立的而不同的行為。
?
解釋器(Interpreter Pattern)
使用解釋器模式(Interpreter Pattern)為語言創建解釋器。
例子場景:一種簡單的給孩子用的編程語言,定義一個語法,表現并解釋語法中的句子,讓學生看到這個語言控制程序中鴨子的效果。
當你需要實現一個簡單的語言時,就使用解釋器模式定義語法的類,并用一個解釋器解釋句子。每個語法規則都用一個類代表。
?
?
要想解釋這種語言,就調用每個表達式類型的interpret()方法。此方法需要傳入一個上下文(context)——也就是我們正在解析的語言字符串輸入流——然后進行比對并采取適當的動作。
?
優點:
將每一個語法規則表示成一個類,方便于實現語言。
因為語法由許多類表示,所以你可以輕易地改變或擴展此語言。
通過在類結構中加入新的方法,可以在解釋的同時增加新的行為,例如打印格式的美化或者進行復雜的程序驗證。
用途:
當你需要實現一個簡單的語言時,使用解釋器。
當你有一個簡單的語法,而且簡單比效率更重要時,使用解釋器。
可以處理腳本語言和編程語言。
缺點:
當語法規則的數目太大時,這個模式可能會變得非常繁雜。在這種情況下,使用解釋器/編譯器的產生器可能更合適。
?
中介者(Mediator Pattern)
使用中介者模式(Mediator Pattern)來集中相關對象之間復雜的溝通和控制方式。
例子場景:有一個自動屋,但是其中有著復雜的規則。想要持續地追蹤每個對象的每個規則,以及眾多對象之間彼此錯綜復雜的關系,實在不容易。
在這個系統中加入一個中介者,一切都變得簡單了:
每個對象都會在自己的狀態改變時,告訴中介者。
每個對象都會對中介者所發出的請求作出回應。
?
?
中介者內包含了整個系統的控制邏輯。當某裝置需要一個新的規則時,或者是一個新的裝置被加入系統內,其所有需要用到的邏輯也都被加進了中介者內。
優點:
通過將對象彼此解耦,可以增加對象的復用性。
通過將控制邏輯集中,可以簡化系統維護。
可以讓對象之間所傳遞的消息變得簡單而且大幅減少。
用途:
中介者常常被用來協調相關的GUI組件。
缺點:
中介者模式的缺點是,如果設計不當,中介者對象本身會變得過于復雜。
轉載于:https://www.cnblogs.com/mengdd/archive/2013/05/12/3073725.html
總結
以上是生活随笔為你收集整理的《Head First设计模式》 读书笔记16 其余的模式(二) 蝇量 解释器 中介者的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 神奇的vfork
- 下一篇: ASP.Net 获取服务器信息