舉例講解Python中的Null模式與橋接模式編程
Null模式
我想每個人都有一種經(jīng)歷,為了獲取某屬性,但是有時候?qū)傩允荖one,那么需要你做異常處理, 而假如你想節(jié)省這樣的條件過濾的代碼,可以使用Null模式以減少對象是否為None的判斷
python的例子
我舉個不是很通用的例子,只是為了讓大家理解這個模式:我有很多類, 但是不是每個類都有類方法test,所以我調(diào)用類方法就要做個異常處理,類似這樣
class A(object):
pass
class B(object):
b = 1
@classmethod
def test(cls):
print cls.b
def get_test(x):
try:
return x.test
except AttributeError:
return None
# 我這里只寫了2個類,但是其實有很多類
for i in [A, B]:
test = get_test(i)
# 我要判斷以下是否獲得了這個類方法才能決定是否可以執(zhí)行
if test:
test()
但是我用Null方法就可以這樣
class Null(object):
def __init__(self, *args, **kwargs):
"忽略參數(shù)"
return None
def __call__(self, *args, **kwargs):
"忽略實例調(diào)用"
return self
def __getattr__(self, mname):
"忽略屬性獲得"
return self
def __setattr__(self, name, value):
"忽略設(shè)置屬性操作"
return self
def __delattr__(self, name):
'''忽略刪除屬性操作'''
return self
def __repr__(self):
return "<Null>"
def __str__(self):
return "Null"
還是上面的功能
class Null(object):
def __init__(self, *args, **kwargs):
"忽略參數(shù)"
return None
def __call__(self, *args, **kwargs):
"忽略實例調(diào)用"
return self
def __getattr__(self, mname):
"忽略屬性獲得"
return self
def __setattr__(self, name, value):
"忽略設(shè)置屬性操作"
return self
def __delattr__(self, name):
'''忽略刪除屬性操作'''
return self
def __repr__(self):
return "<Null>"
def __str__(self):
return "Null"
橋接模式
這個模式其實就是把產(chǎn)品類的實現(xiàn)和抽象類分離,能夠靈活的變化,假如你記得狀態(tài)模式,它是修改內(nèi)部屬性, 而橋接模式是指定好內(nèi)部屬性,每個產(chǎn)品類指定這個屬性被橋接模式類調(diào)用,適用于產(chǎn)品類可能經(jīng)常調(diào)整變化,這樣還能減少了產(chǎn)品類之間的耦合
python的例子
這里實現(xiàn)一個打印操作系統(tǒng)名字的功能
class Bridge(object):
def __init__(self):
self.__implementation = None
def someFunctionality(self):
raise NotImplemented()
class UseCase1(Bridge):
# 根據(jù)初始化參數(shù)傳入實現(xiàn)的產(chǎn)品類
def __init__(self, implementation):
self.__implementation = implementation
# 根據(jù)傳入的產(chǎn)品類的屬性打印結(jié)果
def someFunctionality(self):
print "UseCase1: ",
self.__implementation.anotherFunctionality()
class UseCase2(Bridge):
def __init__(self, implementation):
self.__implementation = implementation
def someFunctionality(self):
print "UseCase2: ",
self.__implementation.anotherFunctionality()
class ImplementationInterface:
def anotherFunctionality(self):
raise NotImplemented
# 這里其實才是實現(xiàn)的產(chǎn)品類
class Linux(ImplementationInterface):
# 它定義了這個方法,回應(yīng)操作系統(tǒng)的名字
def anotherFunctionality(self):
print "Linux!"
class Windows(ImplementationInterface):
def anotherFunctionality(self):
print "Windows."
def main():
linux = Linux()
windows = Windows()
useCase = UseCase1(linux)
useCase.someFunctionality()
useCase = UseCase1(windows)
useCase.someFunctionality()
useCase = UseCase2(linux)
useCase.someFunctionality()
useCase = UseCase2(windows)
useCase.someFunctionality()
if __name__ == "__main__":
main()
相關(guān)文章
Python實現(xiàn)針對給定單鏈表刪除指定節(jié)點的方法
這篇文章主要介紹了Python實現(xiàn)針對給定單鏈表刪除指定節(jié)點的方法,結(jié)合實例形式分析了Python單鏈表的定義、節(jié)點添加、刪除、打印等相關(guān)操作技巧,需要的朋友可以參考下2018-04-04
解決pyinstaller打包運行程序時出現(xiàn)缺少plotly庫問題
這篇文章主要介紹了解決pyinstaller打包運行程序時出現(xiàn)缺少plotly庫問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Python socket模塊實現(xiàn)的udp通信功能示例
這篇文章主要介紹了Python socket模塊實現(xiàn)的udp通信功能,結(jié)合具體實例形式分析了Python使用socket模塊實現(xiàn)UDP通信客戶端與服務(wù)器端相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-04-04
np.concatenate()函數(shù)數(shù)組序列參數(shù)的實現(xiàn)
本文主要介紹了np.concatenate()函數(shù)數(shù)組序列參數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
OpenCV根據(jù)面積篩選連通域?qū)W習(xí)示例
這篇文章主要為大家介紹了OpenCV根據(jù)面積篩選連通域?qū)W習(xí)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06

