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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面向接口编程的优点_为什么我们要面向接口编程

發(fā)布時間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面向接口编程的优点_为什么我们要面向接口编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

到底面向?編程

面向過程編程( ProcedureOriented、簡稱 PO)面向對象編程( ObjectOriented、簡稱 OO) 我們一定聽過,然而實際企業(yè)級開發(fā)里受用更多的一種編程思想那就是:面向接口編程( Interface-Oriented)

接口這個概念我們一定不陌生,實際生活中最常見的例子就是:插座!

我們只需要事先定義好插座的接口標準,各大插座廠商只要按這個接口標準生產,管你什么牌子、內部什么電路結構,這些均和用戶無關,用戶拿來就可以用;而且即使插座壞了,只要換一個符合接口標準的新插座,一切照樣工作!

同理,實際代碼設計也是這樣!

我們在設計一個軟件的代碼架構時,我們都希望事先約定好各個功能的接口(即:約定好接口簽名和方法),實際開發(fā)時我們只需要實現這個接口就能完成具體的功能!后續(xù)即使項目變化、功能升級,程序員只需要按照接口約定重新實現一下,就可以達到系統(tǒng)升級和擴展的目的!

正好,Java中天生就有 interface這個語法,這簡直是為面向接口編程而生的!

所以接下來落實到代碼上,舉個通俗一點的小例子嘮一嘮,實際業(yè)務代碼雖然比這個復雜,但原理是一模一樣的。


做夢了

假如哪一天程序羊真發(fā)達了,一口豪氣買了兩輛豪車,一輛五菱宏光、一輛飛度、并且還專門聘請了一位駕駛員來幫助駕駛。

兩輛豪車在此:

駕駛員定義在此:

駕駛員定義了兩個 drive()方法,分別用來駕駛兩輛車:

這暫且看起來沒問題!日子過得很融洽。

但后來過了段時間,程序羊又變得發(fā)達了一點,這次他又豪氣地買了一輛新款奧拓(Alto)!

可是現有的駕駛員類 Driver的兩個 drive()方法里都開不了這輛新買的奧拓該怎么辦呢?


代碼的靈活解耦

這時候,我想應該沒有誰會專門再去往 Driver類中添加一個新的 drive()方法來達到目的吧?畢竟誰也不知道以后他還會不會買新車!

這時候如果我希望我聘請的這位駕駛員對于所有車型都能駕馭,該怎么辦呢?

很容易想到,我們應該做一層抽象。畢竟不管是奧拓還是奧迪,它們都是汽車,因此我們定義一個父類叫做汽車類 Car,里面只聲明一個通用的 drive()方法,具體怎么開先不用管:

這時,只要我新買的奧拓符合 Car定義的駕駛標準即可被我的駕駛員駕駛,所以只需要新的奧拓來繼承一下 Car類即可:

同理,只需要我的駕駛員具備通用汽車 Car的駕駛能力,那駕駛所有的汽車都不是問題,因此 Drvier類的 drive()方法只要傳入的參數是父類,那就具備了通用性:

問題暫且解決了!


但是再后來,程序羊他好像又更發(fā)達了一些,連車都不想坐了,想買一頭驢(Donkey)讓司機騎著帶他出行!

很明顯,原先適用于汽車的 drive()方法肯定是不適合騎驢的!但我們希望聘請的這位駕駛員既會開汽車,又會騎驢怎么辦呢?

害!我們干脆直接定義一個叫做交通工具( TrafficTools)的通用接口吧!里面包含一個通用的交通工具使用方法,管你是駕駛汽車,還是騎驢騎馬,具體技能怎么實現先不管:

有了這個接口約定,接下來就好辦了。我們讓所有的 Car、或者驢、馬等,都來實現這個接口:

這個時候只要我們的駕駛員師傅也面向接口編程,就沒有任何問題:

很明顯,代碼完全解耦了!這就是接口帶來的便利。


代碼的擴展性

面向接口編程的優(yōu)點遠不止上面這種代碼解耦的場景,在實際企業(yè)開發(fā)里,利用接口思想對已有代碼進行靈活擴展也特別常見。

再舉一個例子:假設程序羊有一個非常豪氣的朋友,叫:程序牛,他們家出行可不坐車,全靠私人飛機出行:

但是突然有一天,他們家聘請的機長跳槽了,這時候程序牛一家就無法出行了,畢竟飛機不會駕駛。

于是他跑來問我借司機,想讓我的駕駛員來幫他駕駛飛機出去旅行。

我一看,由于他們的代碼面向的是接口,我就肯定地答應了他!

這時候對我這邊的擴展來說就非常容易了,我只需要安排我的駕駛員去培訓一下飛行技能就OK了(實現一個方法就行):

這時候我的駕駛員 Driver類就可以直接服務于他們一家的出行了:

看到沒,這一改造過程中,我們只增加了代碼,卻并沒有修改任何已有代碼,就完成了代碼擴展的任務,非常符合開閉原則


實際項目

實際開發(fā)中,我們就暫且不說諸如 Spring這種框架內部會大量使用接口,并對外提供使用,就連我們自己平時寫業(yè)務代碼,我們也習慣于在 Service層使用接口來進行一層隔離:

這種接口定義和具體實現邏輯的分開,非常有利于后續(xù)擴展和維護!


小結

面向接口編程開發(fā),對代碼架構的解耦和擴展確實很有好處,這種編碼思想也值得平時開發(fā)結合實踐反復理解和回味!


每天進步一點點,Peace!

2020.03.04 晚

總結

以上是生活随笔為你收集整理的面向接口编程的优点_为什么我们要面向接口编程的全部內容,希望文章能夠幫你解決所遇到的問題。

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