国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

舉例講解Python中的Null模式與橋接模式編程

2020-01-04 17:47:20
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Python中的Null模式與橋接模式編程,Null模式與橋接模式都屬于Python的設計模式編程,需要的朋友可以參考下
 

Null模式
我想每個人都有一種經歷,為了獲取某屬性,但是有時候屬性是None,那么需要你做異常處理, 而假如你想節省這樣的條件過濾的代碼,可以使用Null模式以減少對象是否為None的判斷

python的例子
我舉個不是很通用的例子,只是為了讓大家理解這個模式:我有很多類, 但是不是每個類都有類方法test,所以我調用類方法就要做個異常處理,類似這樣

class A(object):  passclass B(object):  b = 1  @classmethod  def test(cls):    print cls.bdef get_test(x):  try:    return x.test  except AttributeError:     return None# 我這里只寫了2個類,但是其實有很多類for i in [A, B]:  test = get_test(i)  # 我要判斷以下是否獲得了這個類方法才能決定是否可以執行  if test:    test()

但是我用Null方法就可以這樣

class Null(object):  def __init__(self, *args, **kwargs):    "忽略參數"    return None  def __call__(self, *args, **kwargs):    "忽略實例調用"    return self  def __getattr__(self, mname):    "忽略屬性獲得"    return self  def __setattr__(self, name, value):    "忽略設置屬性操作"    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):    "忽略參數"    return None  def __call__(self, *args, **kwargs):    "忽略實例調用"    return self  def __getattr__(self, mname):    "忽略屬性獲得"    return self  def __setattr__(self, name, value):    "忽略設置屬性操作"    return self  def __delattr__(self, name):    '''忽略刪除屬性操作'''    return self  def __repr__(self):    return "<Null>"  def __str__(self):    return "Null"

橋接模式
這個模式其實就是把產品類的實現和抽象類分離,能夠靈活的變化,假如你記得狀態模式,它是修改內部屬性, 而橋接模式是指定好內部屬性,每個產品類指定這個屬性被橋接模式類調用,適用于產品類可能經常調整變化,這樣還能減少了產品類之間的耦合

python的例子
這里實現一個打印操作系統名字的功能

class Bridge(object):  def __init__(self):    self.__implementation = None  def someFunctionality(self):    raise NotImplemented()class UseCase1(Bridge):  # 根據初始化參數傳入實現的產品類  def __init__(self, implementation):    self.__implementation = implementation  # 根據傳入的產品類的屬性打印結果  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# 這里其實才是實現的產品類class Linux(ImplementationInterface):  # 它定義了這個方法,回應操作系統的名字  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()

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 深水埗区| 红河县| 滨州市| 富锦市| 闸北区| 台东县| 葫芦岛市| 安徽省| 门源| 和龙市| 淮南市| 南溪县| 浑源县| 吉安县| 吴旗县| 通山县| 咸宁市| 蕲春县| 安达市| 历史| 长海县| 寿阳县| 永顺县| 沛县| 个旧市| 繁峙县| 白水县| 棋牌| 合作市| 新疆| 绵阳市| 旅游| 萨嘎县| 昌图县| 多伦县| 香河县| 顺义区| 新化县| 来宾市| 金川县| 岳西县|