python 最簡單的實現介面卡設計模式

2021-10-07 14:35:29 字數 3577 閱讀 6518

介面卡設計模式是懶得改動某些**,或者某些介面不方便改動的時候,使用乙個特定的封裝,一些特定的編寫辦法,使不同的介面可以使用同種呼叫方式使用。

更簡單的說話則是,例如幾個不同的介面 aliyun、qiniuyun、tencentyun是新增的介面,以前都是使用介面yun進行檔案備份,現在每一種呼叫不同名都太煩,統一使用yun去進行aliyun、qiniuyun、tencentyun上傳檔案。這個時候就需要寫乙個介面卡。

現在看乙個簡單例子,有乙個類為upload 是乙個上傳類,裡面有乙個方法是yun方法:

class

upload

:def

yun(self)

:return

'...... uploading '

之後又新增了3個上傳類,分別是 aliupload、qiniuupload、tencentupload,如下**:

class

aliupload

:def

aliyun

(self)

:return

'......aliyun uploading '

class

qiniuupload

:def

qiniuyun

(self)

:return

'......qiniuyun uploading '

class

tencentupload

:def

tencentyun

(self)

:return

'......tencentyun uploading '

現在我想讓它們裡面的yun 方法都使用統一介面名為 uploadyun,需要編寫乙個介面卡,**如下:

class

adapter

:def

__init__

(self,yun,func)

: self.yun=yun

self.__dict__.update(func)

init 方法接收兩個引數,乙個是yun,yun是yun物件,也就是 aliupload、qiniuupload、tencentupload以及upload 的物件,還有乙個是func,需要統一名稱的方法字典。呼叫方式如下:(**比較冗餘,不過對於某一部分讀者會很直觀)

首先新建yun的物件:

yun_obj=upload(

)aliyun_obj=aliupload(

)qiniuyun_obj=qiniuupload(

)tencentyun_obj=tencentupload(

)

隨後新建介面卡物件,並且把以上的物件及方法傳入到介面卡初始化方法中:

aptyun=adapter(yun_obj,

dict

(uploadyun=yun_obj.yun)

)aptali=adapter(aliyun_obj,

dict

(uploadyun=aliyun_obj.aliyun)

)aptqiniu=adapter(qiniuyun_obj,

dict

(uploadyun=qiniuyun_obj.qiniuyun)

)apttencent=adapter(tencentyun_obj,

dict

(uploadyun=tencentyun_obj.tencentyun)

)

由於我們需要通過使用呼叫 uploadyun 方法名統一呼叫,所以鍵為uploadyun,之後會成為類成員變數;最後直接用介面卡物件進行統一名稱的方法呼叫:

print

(aptyun.uploadyun())

print

(aptali.uploadyun())

print

(aptqiniu.uploadyun())

print

(apttencent.uploadyun(

))

結果如下:

統一名稱後可以再一次封裝,進行統一呼叫(此內容不是本文內容不再贅述)。

整體**如下:

class

upload

:def

yun(self)

:return

'...... uploading '

class

aliupload

:def

aliyun

(self)

:return

'......aliyun uploading '

class

qiniuupload

:def

qiniuyun

(self)

:return

'......qiniuyun uploading '

class

tencentupload

:def

tencentyun

(self)

:return

'......tencentyun uploading '

class

adapter

:def

__init__

(self,yun,func)

: self.yun=yun

self.__dict__.update(func)

#新建類

yun_obj=upload(

)aliyun_obj=aliupload(

)qiniuyun_obj=qiniuupload(

)tencentyun_obj=tencentupload(

)#介面卡類

aptyun=adapter(yun_obj,

dict

(uploadyun=yun_obj.yun)

)aptali=adapter(aliyun_obj,

dict

(uploadyun=aliyun_obj.aliyun)

)aptqiniu=adapter(qiniuyun_obj,

dict

(uploadyun=qiniuyun_obj.qiniuyun)

)apttencent=adapter(tencentyun_obj,

dict

(uploadyun=tencentyun_obj.tencentyun)

)#統一介面呼叫示例

print

(aptyun.uploadyun())

print

(aptali.uploadyun())

print

(aptqiniu.uploadyun())

print

(apttencent.uploadyun(

))

android學習 陣列介面卡 簡單介面卡

資料介面卡是將複雜的資料來源填充到指定的檢視介面中 1 陣列介面卡arrayadapter 用於繫結型別單一的資料,資料 可以是陣列或集合 2 簡單介面卡 adapter 也叫 並不簡單的簡單介面卡 用於繫結格式複雜的資料,資料 只能是特定泛型的集合 作用 介面卡是連線資料來源和檢視介面的橋梁 介面...

STL 介面卡實現

函式介面轉函式物件介面的介面卡 內部呼叫引數為指標型別 template class const mem fun t public unary function ret operator const tp p const private ret tp m f const const函式介面轉函式物件...

Python介面卡模式

存在一套舊系統,裡面包含human和synthesizer類,如下 class synthesizer def init self,name self.name name def str self return the synthesizer format self.name defplay sel...