使用介面封裝變化

2021-05-07 11:16:31 字數 1486 閱讀 3224

設計是一種思想,而軟體設計模式是人們在長期的軟體開發經驗中提取出來

的通用方法並被實踐證明是確切可行的,把模式應用到設計之中,會讓我們的軟

件更加強健,讓我們的開發更加高效。

現在我們可以開始來**業務邏輯層的設計方法。在本文中說的是利用介面

來封裝賬戶管理實現的變化。

在設計中,我們常常會遇到同一功能被要求用不同方法進行實現的問

題。比如說在乙個軟體的業務邏輯層設計中,使用者的使用者管理(註冊、登入、注

銷、修改)模組部分首先實現的是本地賬戶的登入功能,賬戶用乙個本地檔案進

行儲存操作。但客戶這時卻說將來他們希望該軟體能夠實行遠端登入,用乙個服

務器來儲存使用者資料。這意味著要改變已經編寫好的**來滿足客戶的要求,考

慮到使用者管理是乙個常用的操作,且它實現的業務邏輯是通用的,介面也是相同

的。我們可以把它做成乙個介面,那麼以後需要編寫使用者管理時直接使用這個介面

便可。乙個軟體設計思想是,把變化的部分封裝起來,即提取它們的共同功能

用介面或抽象類封裝起來,之所以說變化是因為這些共同功能有不同的實現。

根據這種思想,我們可以設計乙個介面類

useroperate

,再用兩個類分別實

現這個介面,其中本地使用者管理類為

localuserop

,而遠端使用者管理類為

netuserop

。實現的類圖如下:

在介面中定義的函式提供了註冊、登入、登出、修改和檢查登入等統一接

口。而實現的兩個子類可以對這些功能有不同的實現方法。比如

register

函式的註冊功能,本地賬戶

localuseop

類在register

中呼叫資料訪問層的函式

把該賬戶寫進本地檔案中。而

netuserop

則可能呼叫

函式sendregistercommand(user)

將賬戶傳給遠端伺服器請求註冊。儘管它

們的實現有天和地一般的差別,但是因為介面的封裝,在整個系統中會帶來極大

的便利。比如說要實現網路功能,只需要寫上

useroperate userop = new netuserop( serverip,serverport);

在表示層中使用者需要註冊新賬號時,只需要簡單呼叫

userop.register(user)

即可。如果使用者又希望轉變為本地使用者管理,僅需

new那段**改為

useroperate userop = new localuserop( filename);

即可,其它地方的**完全不需要更改!

由上面我們也可以看到乙個流程,即表示層呼叫業務邏輯層,業務邏輯層調

用資料訪問層處理邏輯並返回資料給表示層。在這設計之中我們使用了介面來封

裝,使得表示層可以很容易的使用業務邏輯層的功能,也減弱了層與層之間的耦

合度。

有點累了,改天再更新另外乙個很實用的觀察者模式。

封裝變化(三)

設想這樣乙個需求,我們需要為自己的框架提供乙個負責排序的元件。目前需要實現的是氣泡排序演算法和快速排序演算法,根據 面向介面程式設計 的思想,我們可以為這些排序演算法提供乙個統一的介面isort,在這個介面中有乙個方法sort 它能接受乙個object陣列引數。對陣列進行排序後,返回該陣列。介面的定...

封裝變化 Part Three

filed under design pattern bruce zhang 6 35 pm 設想這樣乙個需求,我們需要為自己的框架提供乙個負責排序的元件。目前需要實現的是氣泡排序演算法和快速排序演算法,根據 面向介面程式設計 的思想,我們可以為這些排序演算法提供乙個統一的介面isort,在這個介面...

封裝變化(三)

設想這樣乙個需求,我們需要為自己的框架提供乙個負責排序的元件。目前需要實現的是氣泡排序演算法和快速排序演算法,根據 面向介面程式設計 的思想,我們可以為這些排序演算法提供乙個統一的介面isort,在這個介面中有乙個方法sort 它能接受乙個object陣列引數。對陣列進行排序後,返回該陣列。介面的定...