課程
/后端開發(fā)
/Java
/觀察者模式
為什么obsrever定義成了接口,但是subject定義成了父類?
2018-06-17
源自:觀察者模式 2-2
正在回答
接口和抽象類都是所謂的代碼復(fù)用時(shí)使用。
在使用時(shí),要優(yōu)先注意繼承和接口概念,所有子類是一類事物(有兄弟關(guān)系)時(shí),才應(yīng)該是繼承關(guān)系,不是一類事物就不要繼承改用接口比較好;
當(dāng)不符合繼承條件時(shí),使用接口,接口可以理解為標(biāo)準(zhǔn),只定義大致方向,不論具體實(shí)現(xiàn)的時(shí)候使用;
當(dāng)符合繼承條件時(shí),且你至少有一個(gè)方法是具體實(shí)現(xiàn)的時(shí)候,即已知時(shí),可以考慮使用抽象類;
我個(gè)人理解是,接口更像是人為定義一系列的行為,是一種賦予的感覺;父類(抽象類)是人為抽取共性,是一種提煉的感覺。
至于優(yōu)先級(jí),都是看具體情況的,不過接口總體來說是比繼承要靈活,畢竟是多實(shí)現(xiàn)、單繼承。
當(dāng)然還有接口和繼承都用的情況,這能實(shí)現(xiàn)更多變的情況。
多寫項(xiàng)目,遇到代碼重復(fù)的時(shí)候,就多想想,慢慢就懂得接口和繼承的好處和運(yùn)用了。
慕粉1149573729
subject里面的方法是目標(biāo)對(duì)象通用的,同時(shí)也是清楚的,所以定義成父類,則其具體目標(biāo)對(duì)象就擁有了所有通用方法;
obsrever則是提供一個(gè)標(biāo)準(zhǔn)行為updata,是未實(shí)現(xiàn)方法,其具體實(shí)現(xiàn)方法需要根據(jù)具體的觀察者行為才能定義,所以應(yīng)該為接口;
慕移動(dòng)6842083 提問者
舉報(bào)
解決發(fā)布/訂閱問題的觀察者模式,以及何時(shí)使用觀察者模式
2 回答Subject為什么不用抽象類
1 回答感覺像接口
2 回答有沒有在一個(gè)目標(biāo)subject中通過對(duì)狀態(tài)的set方法 直接notifyObserver 這樣的
6 回答如果觀察者數(shù)量有許多,有人需要接受下雨通知,有人需要下雪,有人需要晴天,該如何來設(shè)計(jì),肯定不能在目標(biāo)借口寫邏輯了
1 回答黃明最后怎么了?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2018-06-19
接口和抽象類都是所謂的代碼復(fù)用時(shí)使用。
在使用時(shí),要優(yōu)先注意繼承和接口概念,所有子類是一類事物(有兄弟關(guān)系)時(shí),才應(yīng)該是繼承關(guān)系,不是一類事物就不要繼承改用接口比較好;
當(dāng)不符合繼承條件時(shí),使用接口,接口可以理解為標(biāo)準(zhǔn),只定義大致方向,不論具體實(shí)現(xiàn)的時(shí)候使用;
當(dāng)符合繼承條件時(shí),且你至少有一個(gè)方法是具體實(shí)現(xiàn)的時(shí)候,即已知時(shí),可以考慮使用抽象類;
我個(gè)人理解是,接口更像是人為定義一系列的行為,是一種賦予的感覺;父類(抽象類)是人為抽取共性,是一種提煉的感覺。
至于優(yōu)先級(jí),都是看具體情況的,不過接口總體來說是比繼承要靈活,畢竟是多實(shí)現(xiàn)、單繼承。
當(dāng)然還有接口和繼承都用的情況,這能實(shí)現(xiàn)更多變的情況。
多寫項(xiàng)目,遇到代碼重復(fù)的時(shí)候,就多想想,慢慢就懂得接口和繼承的好處和運(yùn)用了。
2018-06-19
subject里面的方法是目標(biāo)對(duì)象通用的,同時(shí)也是清楚的,所以定義成父類,則其具體目標(biāo)對(duì)象就擁有了所有通用方法;
obsrever則是提供一個(gè)標(biāo)準(zhǔn)行為updata,是未實(shí)現(xiàn)方法,其具體實(shí)現(xiàn)方法需要根據(jù)具體的觀察者行為才能定義,所以應(yīng)該為接口;