激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 舉例講解Python中的Null模式與橋接模式編程

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

2020-08-11 17:23dongweiming Python

這篇文章主要介紹了Python中的Null模式與橋接模式編程,Null模式與橋接模式都屬于Python的設計模式編程,需要的朋友可以參考下

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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)
  # 我要判斷以下是否獲得了這個類方法才能決定是否可以執行
  if test:
    test()

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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"

還是上面的功能

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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的例子
這里實現一個打印操作系統名字的功能

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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()

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精国品产一区二区三区有限公司 | 欧美一区二区三区成人精品 | 国产精品午夜未成人免费观看 | 国产午夜三级一区二区三桃花影视 | 欧日一级片 | 九九热精品视频在线播放 | 久久精品国产亚洲aa级女大片 | 久久成人视屏 | 色柚视频网站ww色 | 99久久久精品视频 | 亚洲人片在线观看 | 亚洲热线99精品视频 | 日韩做爰视频免费 | 91看片在线看 | 国产免费激情视频 | 99国产精品国产免费观看 | 欧美一区二区三区不卡免费观看 | 日韩av成人| 成人毛片免费 | 免费a级黄色毛片 | 噜噜色av| av在线官网 | 免费黄色在线观看网站 | 黄色一级片在线观看 | 黄色片网站在线免费观看 | 欧美老外a级毛片 | 最新亚洲视频 | 国产精品成人一区二区三区电影毛片 | 在线 日本 制服 中文 欧美 | 亚洲四播房 | 视频一区二区不卡 | 亚洲第一成av人网站懂色 | 亚洲精品无码不卡在线播放he | 久久99精品久久久久久久久久久久 | 成人羞羞在线观看网站 | 亚洲精品7777xxxx青睐 | 久久国产精品99久久人人澡 | 亚洲精品成人久久 | 国产精品久久77777 | 九色在线78m| 精品欧美一区二区精品久久 |