Java“Program to an interface”。這是什么意思?
簡(jiǎn)而言之,而不是像這樣寫(xiě)類
我依靠這個(gè)特定的班級(jí)來(lái)做我的工作
你寫(xiě)的方式說(shuō)
我依賴于任何類,做這個(gè)東西做我的工作。
第一個(gè)示例表示一個(gè)類,該類依賴于特定的具體實(shí)現(xiàn)來(lái)執(zhí)行其工作。從本質(zhì)上講,這不是很靈活。
第二個(gè)示例表示寫(xiě)入接口的類。它不在乎您使用什么具體對(duì)象,而只是在意它實(shí)現(xiàn)某些行為。這可以使該類更加靈活,因?yàn)榭梢詾樗峁┰S多具體的實(shí)現(xiàn)來(lái)執(zhí)行其工作。
例如,特定類可能需要執(zhí)行一些日志記錄。如果您編寫(xiě)依賴于TextFileLogger的類,則將永遠(yuǎn)迫使該類將其日志記錄寫(xiě)到文本文件中。如果要更改日志記錄的行為,則必須更改類本身。該類與它的記錄器緊密相連。
但是,如果您編寫(xiě)該類以依賴ILogger接口,然后為該類提供TextFileLogger,則您將完成相同的操作,但是還具有更加靈活的優(yōu)點(diǎn)。您可以隨意提供任何其他類型的ILogger,而無(wú)需更改類本身。現(xiàn)在,班級(jí)及其記錄器之間的聯(lián)系松散了,您的班級(jí)更加靈活。
解決方法我一直遇到這個(gè)名詞:
編程到接口。
這到底是什么意思?現(xiàn)實(shí)生活中的設(shè)計(jì)方案將受到高度贊賞。
相關(guān)文章:
1. 如何修改phpstudy的phpmyadmin放到其他地方2. java 排序的問(wèn)題3. 我的html頁(yè)面一提交,網(wǎng)頁(yè)便顯示出了我的php代碼,求問(wèn)是什么原因?4. 網(wǎng)絡(luò)傳輸協(xié)議 - 以下三種下載方式有什么不同?如何用python模擬下載器下載?5. angular.js - Angular路由和express路由的組合使用問(wèn)題6. 我在centos容器里安裝docker,也就是在容器里安裝容器,報(bào)錯(cuò)了?7. tp6表單令牌8. 老哥們求助啊9. php - mysql中,作為主鍵的字段,用int類型,是不是比用char類型的效率更高?10. django - 后臺(tái)返回的json數(shù)據(jù)經(jīng)過(guò)Base64加密,獲取時(shí)用python如何解密~!
