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

首頁 > 編程 > Python > 正文

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

2020-01-04 17:47:25
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Python設計模式中的代理模式與模板方法模式編程,文中舉了兩個簡單的代碼片段來說明,需要的朋友可以參考下
 

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

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

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.__blueclass NoBlueProxy(Proxy):  # 我在這個子代理類攔截了blue的訪問,這樣就不會返回被代理的類的Blue屬性  def Blue(self):    return 0if __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的例子

# 整個例子我們要根據不同需求處理的內容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()

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 镇原县| 鄂温| 邯郸县| 齐齐哈尔市| 那曲县| 富锦市| 扶风县| 香格里拉县| 图木舒克市| 兴城市| 莲花县| 固原市| 潜江市| 丰原市| 渭南市| 金寨县| 重庆市| 宁都县| 缙云县| 桐柏县| 靖西县| 綦江县| 太康县| 萍乡市| 合水县| 全南县| 仁布县| 苍山县| 呼伦贝尔市| 临西县| 沅陵县| 景谷| 鹿邑县| 青神县| 奈曼旗| 大宁县| 石柱| 锦屏县| 柘荣县| 嵩明县| 张家川|