Java“Program to an interface”這是什么意思?
簡(jiǎn)而言之,而不是像這樣寫類
我依靠這個(gè)特定的班級(jí)來做我的工作
你寫的方式說
我依賴于任何類,做這個(gè)東西做我的工作。
第一個(gè)示例表示一個(gè)類,該類依賴于特定的具體實(shí)現(xiàn)來執(zhí)行其工作。從本質(zhì)上講,這不是很靈活。
第二個(gè)示例表示寫入接口的類。它不在乎您使用什么具體對(duì)象,而只是在意它實(shí)現(xiàn)某些行為。這可以使該類更加靈活,因?yàn)榭梢詾樗峁┰S多具體的實(shí)現(xiàn)來執(zhí)行其工作。
例如,特定類可能需要執(zhí)行一些日志記錄。如果您編寫依賴于TextFileLogger的類,則將永遠(yuǎn)迫使該類將其日志記錄寫到文本文件中。如果要更改日志記錄的行為,則必須更改類本身。該類與它的記錄器緊密相連。
但是,如果您編寫該類以依賴ILogger接口,然后為該類提供TextFileLogger,則您將完成相同的操作,但是還具有更加靈活的優(yōu)點(diǎn)。您可以隨意提供任何其他類型的ILogger,而無需更改類本身。現(xiàn)在,班級(jí)及其記錄器之間的聯(lián)系松散了,您的班級(jí)更加靈活。
解決方法我一直遇到這個(gè)名詞:
編程到接口。
這到底是什么意思?現(xiàn)實(shí)生活中的設(shè)計(jì)方案將受到高度贊賞。
相關(guān)文章:
1. javascript - 使用form進(jìn)行頁面跳轉(zhuǎn),但是很慢,如何加一個(gè)Loading?2. python 計(jì)算兩個(gè)時(shí)間相差的分鐘數(shù),超過一天時(shí)計(jì)算不對(duì)3. docker-compose中volumes的問題4. javascript - 后臺(tái)管理系統(tǒng)左側(cè)折疊導(dǎo)航欄數(shù)據(jù)較多,怎么樣直接通過搜索去定位到具體某一個(gè)菜單項(xiàng)位置,并展開當(dāng)前菜單5. docker-machine添加一個(gè)已有的docker主機(jī)問題6. angular.js - 輸入郵箱地址之后, 如何使其自動(dòng)在末尾添加分號(hào)?7. javascript - ES6規(guī)范下 repeat 函數(shù)報(bào)錯(cuò) Invalid count value8. javascript - html5的data屬性怎么指定一個(gè)function函數(shù)呢?9. html5 - 為什么使使用vue cli 腳手架,post-css 沒有自動(dòng)對(duì)css3屬性自動(dòng)添加瀏覽器前綴呢?10. javascript - 如何使用nodejs 將.html 文件轉(zhuǎn)化成canvas
