介面卡設計模式是懶得改動某些**,或者某些介面不方便改動的時候,使用乙個特定的封裝,一些特定的編寫辦法,使不同的介面可以使用同種呼叫方式使用。
更簡單的說話則是,例如幾個不同的介面 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...