欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

舉例講解Python設(shè)計(jì)模式編程的代理模式與抽象工廠模式

 更新時(shí)間:2016年01月16日 09:48:45   作者:dongweiming  
這篇文章主要介紹了Python編程的代理模式與抽象工廠模式,文中舉了兩個(gè)簡(jiǎn)單的小例子來(lái)說(shuō)明這兩種設(shè)計(jì)模式的思路在Python編程中的體現(xiàn),需要的朋友可以參考下

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

你先設(shè)想:一個(gè)對(duì)象提供rgb三種顏色值,我想獲得一個(gè)對(duì)象的rgb三種顏色,但是我不想讓你獲得藍(lán)色屬性,怎么辦?

class Proxy(object):
  def __init__(self, subject):
    self.__subject = subject
  # 代理其實(shí)本質(zhì)上就是屬性的委托
  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):
  # 我在這個(gè)子代理類攔截了blue的訪問(wèn),這樣就不會(huì)返回被代理的類的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()

抽象工廠模式
和簡(jiǎn)單工廠/工廠方法不同,抽象工廠可能最好理解,舉個(gè)例子:
比如2個(gè)動(dòng)物,貓和狗,他們都有speak和eat的function,但是很明顯他們執(zhí)行的結(jié)果是不同的 有個(gè)'工廠'(抽象工廠里面一個(gè)類型就是一個(gè)工廠,這點(diǎn)和其他模式的不同)專門(mén)幫助我們找到對(duì)應(yīng)的動(dòng)物做正確的操作 有個(gè)類/函數(shù)可以通過(guò)參數(shù)幫助我們找到上面的這個(gè)工廠  這就是抽象工廠

from abc import ABCMeta

class StandardFactory(object):
  '''這就是那個(gè)抽象工廠'''
  @staticmethod
  def get_factory(factory):
    '''根據(jù)參數(shù)找到對(duì)實(shí)際操作的工廠'''
    if factory == 'cat':
      return CatFactory()
    elif factory == 'dog':
      return DogFactory()
    raise TypeError('Unknown Factory.')


這里幫助dog這個(gè)產(chǎn)品類找到應(yīng)該的屬性的工廠
class DogFactory(object):
  def get_pet(self):
    return Dog();


class CatFactory(object):
  # 注意這個(gè)方法和上面的名字一樣,但是返回的類不同,這就是工廠的作用
  def get_pet(self):
    return Cat();


# 可以認(rèn)為dog和cat都是動(dòng)物的一種,可以有個(gè)基類
class Pet(object):
  # ABCMeta會(huì)讓這個(gè)類在注冊(cè)后添加很多基礎(chǔ)抽象基類,可以看[ABCMeta](http://docs.python.org/2/library/abc.html#abc.ABCMeta)
  __metaclass__ = ABCMeta
  def eat(self):
    pass


# Dog應(yīng)該做什么就是這里
class Dog(Pet):
  def eat(self):
    return 'Dog food...'


class Cat(Pet):
  # 這里的eat依然是同名,她們都是同樣的操作,只是返回不同
  def eat(self):
    return 'Cat food...'


if __name__ =="__main__":
  factory = StandardFactory.get_factory('cat')
  pet = factory.get_pet()
  print pet.eat()

  # 注意這里,你只需要修改抽象工廠傳入的那個(gè)參數(shù),其他什么都不用改
  factory = StandardFactory.get_factory('dog')
  pet = factory.get_pet()
  print pet.eat()

相關(guān)文章

  • python入門(mén)學(xué)習(xí)關(guān)于for else的特殊特性講解

    python入門(mén)學(xué)習(xí)關(guān)于for else的特殊特性講解

    本文將介紹 Python 中的" for-else"特性,并通過(guò)簡(jiǎn)單的示例說(shuō)明如何正確使用它,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • Python的Twisted框架中使用Deferred對(duì)象來(lái)管理回調(diào)函數(shù)

    Python的Twisted框架中使用Deferred對(duì)象來(lái)管理回調(diào)函數(shù)

    當(dāng)說(shuō)起Twisted的異步與非阻塞模式等特性時(shí),回調(diào)函數(shù)的使用在其中自然就顯得不可或缺,接下來(lái)我們就來(lái)看Python的Twisted框架中使用Deferred對(duì)象來(lái)管理回調(diào)函數(shù)的用法.
    2016-05-05
  • 詳解numpy的argmax的具體使用

    詳解numpy的argmax的具體使用

    這篇文章主要介紹了詳解numpy的argmax的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 詳解Python3 pickle模塊用法

    詳解Python3 pickle模塊用法

    pickle模塊中的兩個(gè)主要函數(shù)是dump()和load(),這篇文章主要介紹了Python3 pickle模塊用法,需要的朋友可以參考下
    2019-09-09
  • 關(guān)于Kotlin中SAM轉(zhuǎn)換的那些事

    關(guān)于Kotlin中SAM轉(zhuǎn)換的那些事

    這篇文章主要給大家介紹了關(guān)于Kotlin中SAM轉(zhuǎn)換的那些事,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Selenium+BeautifulSoup+json獲取Script標(biāo)簽內(nèi)的json數(shù)據(jù)

    Selenium+BeautifulSoup+json獲取Script標(biāo)簽內(nèi)的json數(shù)據(jù)

    這篇文章主要介紹了Selenium+BeautifulSoup+json獲取Script標(biāo)簽內(nèi)的json數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python基礎(chǔ)異常處理梳理總結(jié)

    Python基礎(chǔ)異常處理梳理總結(jié)

    這篇文章主要介紹了Python基礎(chǔ)異常處理梳理總結(jié),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-06-06
  • 舉例詳解Python中的split()函數(shù)的使用方法

    舉例詳解Python中的split()函數(shù)的使用方法

    這篇文章主要介紹了舉例詳解Python中的split()函數(shù)的使用方法,split()函數(shù)的使用是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),通常用于將字符串切片并轉(zhuǎn)換為列表,需要的朋友可以參考下
    2015-04-04
  • Python 一鍵制作微信好友圖片墻的方法

    Python 一鍵制作微信好友圖片墻的方法

    這篇文章主要介紹了Python 一鍵制作微信好友圖片墻的方法,有兩種方法,每種方法給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • 使用Python+wxpy 找出微信里把你刪除的好友實(shí)例

    使用Python+wxpy 找出微信里把你刪除的好友實(shí)例

    今天小編就為大家分享一篇使用Python+wxpy 找出微信里把你刪除的好友實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02

最新評(píng)論