設計模式 物件導向五 基於介面而非實現程式設計

2021-09-29 23:35:38 字數 1978 閱讀 5714

基於介面而非實現程式設計,是一條設計原則,它先於很多程式語言誕生,是一條比較抽象、泛化的設計思想。 這條原則中的介面,可以理解為程式語言中的介面或者抽象類。

基於介面而非實現程式設計的優勢

可以提高**質量,因為應用這條原則,可以將介面和實現相分離,封裝不穩定的實現,暴漏穩定的介面。上游系統面向介面而非實現程式設計,不依賴不穩定的實現細節,這樣當實現發生變化的時候,上游系統的**基本不需要改動,以此來降低耦合性,提高擴充套件性

如何將這條原則應用到**中

比如系統中涉及處理和儲存的業務邏輯,經過處理後上傳到阿里雲。

流程:建立bucket(儲存目錄)、生成access token 訪問憑證、攜帶access token上傳到指定的bucket中

public class aliyunimagestore 

public string generateaccesstoken()

public string uploadtoaliyun(image image, string bucketname, string accesstoken)

public image downloadfromaliyun(string url, string accesstoken)

}// aliyunimagestore 類的使用舉例

public class imageprocessingjob

}

這段**很乾淨,滿足我們的需求。

但是軟體開發中唯一不變的就是變化。過了一段時間,我們建立了私有雲,不再將存到阿里雲,而是將儲存到私有雲,為了滿足這個需求,我們設計新的privaateimaagestore類,替換專案中所有的aliyunimagestore類。

如何修改

我們必須將aliyunimaagestore類中所有的public方法,在privateimagestore類中都啄一定義並實現一遍。這樣會有以下問題

++aliyunimaagestore類中有些函式命名暴漏了實現細節++,比如uploadtoaliyun()和downloadfromaliyun()。我們把這種包含aliyun字眼的方法,照抄到privateimagestore類中,顯然不合適

++將儲存到阿里雲的流程,跟儲存到私有雲的流程,可能並不是完全一致++。比如,阿里雲上傳中,需要生成accesstoken,而私有雲不需要

如何解決

解決這個問題的根本就是在編寫**的時候,要遵從『基於介面而非實現程式設計』的原則,具體,我們需要做到下面3點

重構後的**如下

public inte***ce imagestore 

public class aliyunimagestore implements imagestore

public image download(string url)

private void createbucketifnotexisting(string bucketname)

private string generateaccesstoken()

}public class privateimagestore implements imagestore

public image download(string url)

private void createbucketifnotexisting(string bucketname)

}// imagestore 的使用舉例

public class imageprocessingjob

}

總結

在做軟體開發的時候,一定要有抽象意識、封裝意識、介面意識。在定義介面的時候,不要暴漏任何實現細節。介面的定義只表明做什麼,而不是怎麼做。而且在設計介面的時候,要多思考,這樣的介面設計是否通用,是否能夠做到在替換及具體介面實現的時候,不需要任何介面定義的改動

8 物件導向 抽象特性 面向介面而非實現程式設計

越抽象 越頂層 越脫離具體某一實現的設計,越能提高 的靈活性,越能應對未來的需求變化。好的 設計,不僅能應對當下的需求,而且在將來需求發生變化的時候,仍然能夠在不破壞原有 設計的情況下靈活應對。基於介面而非實現 又名基於抽象而非實現 程式設計就是一種非常有效的提高 質量的手段,上游系統面向介面而非程...

物件導向 設計模式

提到設計模式,不得不感謝gof gang of four,四人組 他們1995年出版的 設計模式 一書,第一次將設計模式提公升到理論高度,並將之規範化。書中一共總結了23種基本的設計模式。而這23中設計模式幾乎涵蓋了物件導向設計過程中所有問題的解決方案。書中提到的23種設計模式分別是 1.單例模式 ...

設計模式 物件導向

所謂的設計原則也好,設計模式也罷,無非是在物件導向的前提下產生的。而物件導向的前提是抽象,物件導向的三大特徵是封裝 繼承 多型。為了從本質上理解設計模式,下面我們分析一下這些概念之間的關係。請看下圖 物件導向思想的前提是抽象,從現實世界中抽象出一些物件或者類的共性之後封裝成類或者抽象類或者介面。這些...