HeadFirsts設計模式中的Duck

      HeadsFirst中開始的Duck實現模式是採用的策略模式,在講解Duck的實現過程,該書提到了設計模式的兩個規則,一是:封裝不變的,分離變化的,二是:針對接口編程而不是針對實現編程。

      那麼Duck的實現是如何履行這兩個規則的呢?首先建立一個Duck基類,以後所有的Duck子類均是派生自該基類,而在Duck中就需要考慮到那些屬性是所有的Duck子類都擁有的,而那些屬性是根據不同的子類而變化的,在需求中瞭解到所有的鴨子都是會游泳的,不同種類的鴨子叫聲不同,部分鴨子具有飛行的屬性。因此根據第一個規則,我們可以將游泳屬性封裝到Duck基類中,而將叫聲以及飛行屬性分離出來。那麼如何分離出來呢,這裏又需要用到的二個規則,針對接口編程(本人對這個說法有點模糊,不知道個人的理解是否正確)。首先將叫聲和飛行屬性定義爲接口,在接口中約束需要實現的方法,然後根所有不同的叫聲,以及飛行狀態來編寫具體的實現類,當實現類衆多時,我們可以定義一個接口類型的變量作爲具體實現類的容器。

接下來看看詳細的代碼:

duck基類及子類

行爲接口以及其實現類

 

調用方式:

 

當出現新的需求時,我們需要在DUCK類中添加新的屬性,並且需要了解該屬性是不是所有的duck子類都擁有該屬性,如果是所有的duck都具備該屬性,我們可以再DUCK中實現,否則可以像飛行以及叫聲行爲那樣通過接口來實現這些功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章