小猿圈java之is-a、have-a和like-a的區(qū)別

在面向?qū)ο蟮脑O(shè)計領(lǐng)域里,有很多設(shè)計思路,主要有三種:is-a、has-a、like-a,這三種在java的類、接口、抽象類中很多體現(xiàn),這篇文章小猿圈詳解一下這三種定義,感興趣的朋友來看一下這篇文章。

1、is-a是什么

is-a,顧名思義,是一個,代表繼承關(guān)系。

如果A is-a B,那么B就是A的父類。

一個類完全包含另一個類的所有屬性及行為。

例如PC機(jī)是計算機(jī),工作站也是計算機(jī),PC機(jī)和工作站是兩種不同類型的計算機(jī),但都繼承了計算機(jī)的共同特性。因此在用Java語言實現(xiàn)時,應(yīng)該將PC機(jī)和工作站定義成兩種類,均繼承計算機(jī)類。

2、has-a是什么

has-a,顧名思義,有一個,代表從屬關(guān)系。

如果A has a B,那么B就是A的組成部分。

同一種類的對象,通過它們的屬性的不同值來區(qū)別。

例如一臺PC機(jī)的操作系統(tǒng)是Windows,另一臺PC機(jī)的操作系統(tǒng)是Linux。操作系統(tǒng)是PC機(jī)的一個成員變量,根據(jù)這一成員變量的不同值,可以區(qū)分不同的PC機(jī)對象。

3、 like-a是什么

like-a,顧名思義,像一個,代表組合關(guān)系。

如果A like a B,那么B就是A的接口。

新類型有老類型的接口,但還包含其他函數(shù),所以不能說它們完全相同。

例如一臺手機(jī)可以說是一個微型計算機(jī),但是手機(jī)的通訊功能顯然不是計算機(jī)具備的行為,所以手機(jī)繼承了計算機(jī)的特性,同時需要實現(xiàn)通訊功能,而通訊功能需要作為單獨接口,而不是計算機(jī)的行為。

4、is-a,has-a,like-a如何應(yīng)用

如果你確定兩件對象之間是is-a的關(guān)系,那么此時你應(yīng)該使用繼承;比如菱形、圓形和方形都是形狀的一種,那么他們都應(yīng)該從形狀類繼承。

如果你確定兩件對象之間是has-a的關(guān)系,那么此時你應(yīng)該使用聚合;比如電腦是由顯示器、CPU、硬盤等組成的,那么你應(yīng)該把顯示器、CPU、硬盤這些類聚合成電腦類。

如果你確定兩件對象之間是like-a的關(guān)系,那么此時你應(yīng)該使用組合;比如空調(diào)繼承于制冷機(jī),但它同時有加熱功能,那么你應(yīng)該把讓空調(diào)繼承制冷機(jī)類,并實現(xiàn)加熱接口。

上面就是對這三種設(shè)計思路的詳解,也是面向?qū)ο蠼?jīng)常用到的,小猿圈加加針對三種設(shè)計做了詳細(xì)的講解,想要學(xué)習(xí)具體的設(shè)計思路的,可以來小猿圈學(xué)習(xí)一下,一個自己做的學(xué)習(xí)網(wǎng)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容