一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

服務器之家 - 腳本之家 - Python - 簡介Python設計模式中的代理模式與模板方法模式編程

簡介Python設計模式中的代理模式與模板方法模式編程

2020-08-11 17:21dongweiming Python

這篇文章主要介紹了Python設計模式中的代理模式與模板方法模式編程,文中舉了兩個簡單的代碼片段來說明,需要的朋友可以參考下

代理模式
Proxy模式是一種常用的設計模式,它主要用來通過一個對象(比如B)給一個對象(比如A) 提供'代理'的方式方式訪問。比如一個對象不方便直接引用,代理就在這個對象和訪問者之間做了中介

python的例子
你先設想:一個對象提供rgb三種顏色值,我想獲得一個對象的rgb三種顏色,但是我不想讓你獲得藍色屬性,怎么辦?

?
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
class Proxy(object):
  def __init__(self, subject):
    self.__subject = subject
  # 代理其實本質上就是屬性的委托
  def __getattr__(self, name):
    return getattr(self.__subject, name)
 
class RGB:
  def __init__(self, red, green, blue):
    self.__red = red
    self.__green = green
    self.__blue = blue
  def Red(self):
    return self.__red
  def Green(self):
    return self.__green
  def Blue(self):
    return self.__blue
 
class NoBlueProxy(Proxy):
  # 我在這個子代理類攔截了blue的訪問,這樣就不會返回被代理的類的Blue屬性
  def Blue(self):
    return 0
 
if __name__ == '__main__':
  rgb = RGB(100, 192, 240)
  print rgb.Red()
  proxy = Proxy(rgb)
  print proxy.Green()
  noblue = NoBlueProxy(rgb)
  print noblue.Green()
  print noblue.Blue()


模板方法模式
不知道你有沒有注意過,我們實現某個業務功能,在不同的對象會有不同的細節實現, 如果說策略模式, 策略模式是將邏輯封裝在一個類(提到的文章中的Duck)中,然后使用委托的方式解決。 模板方法模式的角度是:把不變的框架抽象出來,定義好要傳入的細節的接口. 各產品類的公共的行為 會被提出到公共父類,可變的都在這些產品子類中

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
# 整個例子我們要根據不同需求處理的內容
ingredients = "spam eggs apple"
line = '-' * 10
 
# 這是被模板方法調用的基礎函數
def iter_elements(getter, action):
  """循環處理的骨架"""
  # getter是要迭代的數據,action是要執行的函數
  for element in getter():
    action(element)
    print(line)
 
def rev_elements(getter, action):
  """反向的"""
  for element in getter()[::-1]:
    action(element)
    print(line)
 
# 數據經過函數處理就是我們最后傳給模板的內容
def get_list():
  return ingredients.split()
 
# 同上
def get_lists():
  return [list(x) for x in ingredients.split()]
 
# 對數據的操作
def print_item(item):
  print(item)
#反向處理數據
def reverse_item(item):
  print(item[::-1])
 
# 模板函數
def make_template(skeleton, getter, action):
  # 它抽象的傳入了 骨架,數據,和子類的操作函數
  def template():
    skeleton(getter, action)
  return template
 
# 列表解析,數據就是前面的2種骨架(定義怎么樣迭代),2個分割數據的函數,正反向打印數據的組合
templates = [make_template(s, g, a)
      for g in (get_list, get_lists)
      for a in (print_item, reverse_item)
      for s in (iter_elements, rev_elements)]
 
# 執行
for template in templates:
  template()

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜福利理论片在线播放 | 精品国内自产拍在线视频 | 香蕉精品高清在线观看视频 | 国产自拍偷拍自拍 | 99热精品在线播放 | 久久机热视频 这里只有精品首页 | 色婷婷综合和线在线 | 欧美男女爱爱视频 | 欧美日韩一区视频 | 国产麻豆精品免费视频 | fuqer老师| 国产福利不卡一区二区三区 | jux629三浦理惠子在线播放 | 2022最新a精品视频在线观看 | 18日本xxxxxxⅹxx96 | 日本人成在线视频免费播放 | 美女被视频 | 美女扒开两腿露出尿口的视频 | 欧美日韩亚洲综合久久久 | melody中文字幕 | 精品国产成人a区在线观看 精品国产91久久久久久久 | 91专区| 美女被的在线网站91 | 国内会所按摩推拿国产 | 亚洲成A人片在线观看中文L | 日本免费在线观看视频 | 本站只有精品 | 日本草草视频在线观看 | 5x社区发源地最新地址 | 羞羞漫画免费漫画页面在线看漫画秋蝉 | 天天综合五月天 | 四虎影视永久在线 | 色菇凉天天综合网 | 日产精品一卡2卡三卡4乱码久久 | 国产精品久线观看视频 | 青草国内精品视频在线观看 | 日本又黄又裸一级大黄裸片 | 国产成人综合一区人人 | 波多野结衣女老师 | 大学生按摩黄a级中文片 | 国产rpg迷雾之风冷狐破解 |