前言:本篇系看完《研磨設計模式》一書的個人理解和總結,可能存在不正確的地方,看時需要持懷疑態度。另外,所有的圖都是示意圖,示意,示。
橋接模式(Bridge):
幾點解釋:
- 橋接模式的本質在於 分離抽象與實現。
- Java中的接口的作用在於 封裝隔離,和橋接模式不謀而合。
- 我們在Java中面向接口編程,所以 Java中無處不橋接。
訪問者模式(Visitor):
幾點解釋:
- 訪問者模式通過預留 accept(Visitor visitor) 方法,來實現在不改變類代碼的情況下,給對象添加各種新功能。
- 調用accept方法時,發生了兩次調用:accept 是第一次,之後在方法裏調用了 傳入的訪問者對象的方法 visitXXX,並將當前對象實例作爲參數傳入,這是第二次調用。
- 訪問者模式的好處在於,我們可以靈活的擴展需要的訪問者對象,然後調用原有對象的accept方法並傳入相應的訪問者對象,就可以基於已有對象的數據實現新的功能。
- 這個模式的弊端在於 如果新增了 Element的實現,則訪問者接口需要變化,導致所有的訪問者實現都需要跟着變化。訪問者實現需要操作實際的 Element對象的數據,這破壞了封裝性,不恰當的操作可能會誤改Element對象的數據。