日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【设计模式之美】<Reading Notes>继承与组合

發布時間:2023/12/1 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【设计模式之美】<Reading Notes>继承与组合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

繼承缺點
繼承是面向對象的四大特性之一,用來表示類之間的 is-a 關系,可以解決代碼復用的問題。雖然繼承有諸多作用,但繼承層次過深、過復雜,也會影響到代碼的可維護性。在這種情況下,我們應該盡量少用,甚至不用繼承.
使用組合替換繼承
繼承主要有三個作用:表示 is-a 關系,支持多態特性,代碼復用。而這三個作用都可以通過組合、接口、委托三個技術手段來達成。

設計一個關于鳥的類,使用組合、接口、委托完成

定義為一個抽象類 AbstractBird,麻雀、鴿子、烏鴉等,都繼承這個抽象類。由于不是所有鳥都會飛,所以不是所有鳥都有fly()這個方法。
我們可以從鳥會不會飛、會不會叫來對鳥進行劃分。兩個行為搭配起來會產生四種情況:會飛會叫、不會飛會叫、會飛不會叫、不會飛不會叫。如果假如新行為,我們可能還需要繼續構建更加細分的抽象類,這樣就比較麻煩。繼承層次過深、繼承關系過于復雜會影響到代碼的可讀性和可維護性。
可以利用組合(composition)、接口、委托(delegation)三個技術手段解決這個問題。
接口表示具有某種行為特性:
可以定義一個 Flyable 接口,只讓會飛的鳥去實現這個接口。
對于會叫、會下蛋這些行為特性,我們可以類似地定義 Tweetable 接口、EggLayable 接口。
1、定義接口

public interface Flyable { void fly(); } public interface Tweetable { void tweet(); } public interface EggLayable { void layEgg(); }

2、通過多個接口實現多個特性:鴕鳥不會飛,但是會叫會下蛋,所以只有兩個接口。注意,mplements 是實現多個接口, 接口的方法一般為空的, 必須重寫才能使用 。

public class Ostrich implements Tweetable, EggLayable {//鴕鳥 //... 省略其他屬性和方法... @Override public void tweet() { //... } @Override public void layEgg() { //... } }

3、接口只聲明方法,不定義實現。也就是說,每個會下蛋的鳥都要實現一遍 layEgg() 方法,并且實現邏輯是一樣的,這就會導致代碼重復的問題。
可以針對三個接口定義三個實現類

實現了 fly() 方法的 FlyAbility 類、
實現了 tweet() 方法的 TweetAbility 類、
實現了 layEgg() 方法的 EggLayAbility 類。

public interface Flyable { void fly();} public class FlyAbility implements Flyable { @Override public void fly() { //... } } //省略Tweetable/TweetAbility/EggLayable/EggLayAbility

然后,通過組合和委托技術來消除代碼重復:

public class Ostrich implements Tweetable, EggLayable {//鴕鳥 private TweetAbility tweetAbility = new TweetAbility(); //組合 private EggLayAbility eggLayAbility = new EggLayAbility(); //組合 //... 省略其他屬性和方法... @Override public void tweet() { tweetAbility.tweet(); // 委托 }@Override public void layEgg() { eggLayAbility.layEgg(); // 委托 } }

由于對Java不太熟悉,可能還需要關注一下這個知識點:
extends和implements區別

總結

以上是生活随笔為你收集整理的【设计模式之美】<Reading Notes>继承与组合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。