接口行爲的擴展,常常面臨這樣的問題,以前已經定義好一個接口,且該接口已經在不少地方使用到,如今咱們想讓新增新方法。spa
以下圖1所示所示,已經定義了接口IVedioMedia,已經有RM和Mpeg實現了它。如今若是在IVedioMedia接口中新增resize()方法,那麼就要連同RM和Mpeg一同修改,這已經違反了open-close原則,即在添加新功能的同時,不修改原有的、已經存在的代碼。這時候咱們應該定義新的interface接口——IResizable,以後新建RMAdapter來實現這個接口,同時讓RMAdapter繼承RM,這樣就在實現新功能的同時,不修改IVediaoMedia和RM,作到了不修改已經存在的代碼。設計
因爲項目的歷史緣由,常常會遇到這種問題,因此在這裏記錄下。繼承
圖1 接口
建議讀者閱讀《軟件設計精要與模式》的第14章,閱讀原文。io