在面向對象的設計領域裏,有不少設計思路,主要有三種:is-a、has-a、like-a,這三種在java的類、接口、抽象類中不少體現,這篇文章小猿圈詳解一下這三種定義,感興趣的朋友來看一下這篇文章。java
一、is-a是什麼函數
is-a,顧名思義,是一個,表明繼承關係。學習
若是A is-a B,那麼B就是A的父類。操作系統
一個類徹底包含另外一個類的全部屬性及行爲。設計
例如PC機是計算機,工做站也是計算機,PC機和工做站是兩種不一樣類型的計算機,但都繼承了計算機的共同特性。所以在用Java語言實現時,應該將PC機和工做站定義成兩種類,均繼承計算機類。對象
二、has-a是什麼繼承
has-a,顧名思義,有一個,表明從屬關係。接口
若是A has a B,那麼B就是A的組成部分。get
同一種類的對象,經過它們的屬性的不一樣值來區別。變量
例如一臺PC機的操做系統是Windows,另外一臺PC機的操做系統是Linux。操做系統是PC機的一個成員變量,根據這一成員變量的不一樣值,能夠區分不一樣的PC機對象。
三、 like-a是什麼
like-a,顧名思義,像一個,表明組合關係。
若是A like a B,那麼B就是A的接口。
新類型有老類型的接口,但還包含其餘函數,因此不能說它們徹底相同。
例如一臺手機能夠說是一個微型計算機,可是手機的通信功能顯然不是計算機具有的行爲,因此手機繼承了計算機的特性,同時須要實現通信功能,而通信功能須要做爲單獨接口,而不是計算機的行爲。
四、is-a,has-a,like-a如何應用
若是你肯定兩件對象之間是is-a的關係,那麼此時你應該使用繼承;好比菱形、圓形和方形都是形狀的一種,那麼他們都應該從形狀類繼承。
若是你肯定兩件對象之間是has-a的關係,那麼此時你應該使用聚合;好比電腦是由顯示器、CPU、硬盤等組成的,那麼你應該把顯示器、CPU、硬盤這些類聚合成電腦類。
若是你肯定兩件對象之間是like-a的關係,那麼此時你應該使用組合;好比空調繼承於製冷機,但它同時有加熱功能,那麼你應該把讓空調繼承製冷機類,並實現加熱接口。
上面就是對這三種設計思路的詳解,也是面向對象常常用到的,小猿圈加加針對三種設計作了詳細的講解,想要學習具體的設計思路的,能夠來小猿圈學習一下,一個本身作的學習網。