



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第分析Go語言接口的設計原則目錄一、前言二、開閉原則三、依賴倒置原則3.1、什么是依賴倒置原則3.2、一個耦合度極高的模塊關系設計3.3、面向抽象層依賴倒轉
一、前言
go的interface寫起來更自由,無需顯示的實現(xiàn),只要實現(xiàn)了與interfece所包含的所有函數(shù)簽名的相同的方法即可。讓編碼更靈活,易擴展。
如何理解go語言中的interface呢
1.interface是方法聲明的集合
2.接口的方法與實現(xiàn)接口的類型方法格式一致
3.接口中所有方法均被實現(xiàn)
4.interface可以作為一種數(shù)據(jù)類型,實現(xiàn)了該接口的任何對象都可以給對應的接口類型變量賦值
特別說明兩點:
interface可以被任意對象實現(xiàn),一個類型/對象也可以實現(xiàn)多個interface
方法不能重載,如eat(),eat(sstring)不能同時存在
那么作為interface數(shù)據(jù)類型,他存在的意義在哪呢?實際上是為了滿足一些面向對象的編程思想。我們知道,軟件設計的最高目標就是高內(nèi)聚,低耦合。那么其中有一個設計原則叫開閉原則。什么是開閉原則
二、開閉原則
在面向對象編程領域中,開閉原則規(guī)定“軟件中的對象(類,模塊,函數(shù)等等)應該對于擴展是開放的,但是對于修改是封閉的”,這意味著一個實體是允許在不改變它的源代碼的前提下變更它的行為。
看重點:對于擴展是開放的,對于修改是封閉的.
舉個例子:銀行每天要辦理不同的業(yè)務,存款,轉賬,取款等.如果直接是實體來實現(xiàn)如下
packagebank
import"fmt"
typeBankerstruct{
func(b*Banker)Save(){
fmt.Println("存錢")
func(b*Banker)Transfer(){
fmt.Println("轉賬")
func(b*Banker)Get(){
fmt.Println("取錢")
}
有個人要來存錢取錢轉賬了
packagemain
import"aaa/bank"
funcmain(){
varb=bank.Banker{}
b.Save()
b.Get()
b.Transfer()
}
那么隨著業(yè)務越來越多,越來越大.我又要新增加一些業(yè)務,比如基金,股票.然后越來越多,越來越大.導致Banker這個模塊越來越臃腫
這樣的設計會導致,當我們?nèi)ソoBanker添加新的業(yè)務的時候,會直接修改原有的Banker代碼,那么Banker模塊的功能會越來越多,出現(xiàn)問題的幾率也就越來越大,假如此時Banker已經(jīng)有99個業(yè)務了,現(xiàn)在我們要添加第100個業(yè)務,可能由于一次的不小心,導致之前99個業(yè)務也一起崩潰,因為所有的業(yè)務都在一個Banker類里,他們的耦合度太高,Banker的職責也不夠單一,代碼的維護成本隨著業(yè)務的復雜正比成倍增大。
我們使用開閉原則,使用interface將banker模塊抽象出來.然后根據(jù)這個抽象的模塊,去實現(xiàn)save,get,transfer.....
那么依然可以搞定程序的需求。然后,當我們想要給Banker添加額外功能的時候,之前我們是直接修改Banker的內(nèi)容,現(xiàn)在我們可以單獨定義一個股票Banker(實現(xiàn)股票方法),到這個系統(tǒng)中。而且股票Banker的實現(xiàn)成功或者失敗都不會影響之前的穩(wěn)定系統(tǒng),他很單一,而且獨立。
所以以上,當我們給一個系統(tǒng)添加一個功能的時候,不是通過修改代碼,而是通過增添代碼來完成,那么就是開閉原則的核心思想了。所以要想滿足上面的要求,是一定需要interface來提供一層抽象的接口的。
golang代碼實現(xiàn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 股份分紅及銷售合同協(xié)議
- 深圳小型家裝合同協(xié)議
- 翻譯機構合作合同協(xié)議
- 股權質押協(xié)議主合同
- 海外模特經(jīng)紀合同協(xié)議
- 老婆在家工作合同協(xié)議
- 滾齒機出售轉讓合同協(xié)議
- 消防裝修設計合同協(xié)議
- 綜合畫冊設計合同協(xié)議
- 維修保養(yǎng)農(nóng)機合同協(xié)議
- 成語故事-此地無銀三百兩-課件
- 程序員兼職協(xié)議
- 藝術設計畢業(yè)答辯模板
- 《防癌抗癌專題》課件
- 【MOOC】大學英語視聽導學-湖南大學 中國大學慕課MOOC答案
- 采購部5年規(guī)劃
- (PPAP)生產(chǎn)件批準作業(yè)指導書
- 催收物業(yè)費的委托代理合同
- 智慧加氣站綜合管理平臺建設方案
- 生成式AI時代下的提示素養(yǎng)培育研究
- 2023年中銅國際貿(mào)易集團有限公司招聘筆試真題
評論
0/150
提交評論