泛型和模板設計模式

2021-09-22 06:13:35 字數 2189 閱讀 7168

當兩個或多個功能很大一部分實現都一樣,只有其中一部分處理邏輯不同的情況下。我們通常都會採用模板設計模式來實現,這樣既可以滿足功能的需求也可以很好地實現**的維護。這也正是設計模式的精髓所在。但是,如果有這樣乙個需求,該如何實現呢?既滿足了模板設計模式的條件,也就是說兩個或多個功能的總體實現流程是一致的,只是部分處理邏輯上存在差異;但有點特別的是根據不同的功能,返回值型別有所差別。這樣的情況下我們可以通過模板設計模式結合泛型來很好地實現相應的功能。

技術要點

我們先來看下模板設計模式的技術點,模板設計模式使用的技術點是:

抽象類:控制程式總體邏輯(骨架)

實現類:繼承於抽象類,實現具體差異部分的邏輯

此處要求返回值型別根據不同的業務,返回不同型別的響應資訊,因此還需要用到泛型。

泛型於設計模式的結合

具體實現如下:

響應實體泛型的定義

public class result

public void setresponse(t response) }

程式骨架,模板設計模式

public abstract class baseservice

/*** 返回值-泛型,根據不同的業務返回不同的響應型別

* @return */

private t method2()

/*** 公共處理業務 */

private void method1()

/*** 響應型別-泛型,提供出去給具體實現類進行初始化

* @return */

protected abstract t initresponse(); }

模板抽象類需要注意的幾個點:

baseservice,模板類提供泛型支援

result裡的response返回值型別,由子類進行控制

返回值型別,通過提供抽象方法,子類進行初始化來實現。protected abstract t initresponse();

至此,根據不同業務型別返回不同響應型別的模板設計模式的總體框架已經搭建完成了。

差異業務實現類

定義返回值型別

繼承於模板抽象類-業務實現類

實現模板抽象類的方法

返回值型別

/** *

* 返回值型別基類,公共部分 */

public class baseresponse

public void setname(string name) }

/** *

* 返回值型別 */

public class chinaresponse extends baseresponse

public void setprovince(listprovince) }

/** *

* 返回值型別 */

public class americaresponse extends baseresponse

public void setstate(liststate) }

繼承於模板抽象類-業務實現類

/** *

* 業務實現類1 */

public class chinaserviceimpl extends baseservice

/*** 實現抽象方法,初始化返回值型別

* @return */

@override

protected chinaresponse initresponse() }

/** *

* 業務實現類2 */

public class americaserviceimpl extends baseservice }

測試public static void main(string args)

測試結果:

baseservice method1

baseservice method2

com.designpatterns.template.generic.response.chinaresponse@28d93b30

baseservice method1

baseservice method2

com.designpatterns.template.generic.response.americaresponse@1b6d3586 總結

通過模板設計模式和泛型的結合,可以非常靈活地處理通用流程和處理邏輯之間的差異;又可以很好地滿足不同業務不同返回值型別的需求。

模板和泛型程式設計

在建立完成抽象操作的函式時,如 拷貝,反轉和排序,你必須定義多個版本以便能處理每一種資料型別。以比較兩個數的大小為例 includeusing namespace std int max int a,int b double max double a,double b int main 例如 tem...

C 泛型設計 模板規格(譯)

c 泛型設計 模板規格 譯 c 關鍵字template 可以用來宣告一批引數化的類 模板類 或函式 模板函式 一般使用格式如下 template template parameter list declaration 說明 template parameter list 是乙個以逗號分隔開的模板引數...

模板 泛型程式設計

我們從乙個很簡單的問題來進入泛型程式設計 question 如何寫乙個通用的加法函式 使用函式過載。針對每乙個所需相同行為的不同型別重新實現 函式過載的缺點 1 只要有 型別出現,就要重新新增對應函式 2 除型別外,所有函式的函式體都相同,的復用率不高 3 如果函式知識返回值型別不同,函式過載不能解...