예 를 들 어 Python 디자인 모델 프로 그래 밍 의 대리 모델 과 추상 적 인 공장 모델 을 설명 합 니 다.

3068 단어
프 록 시 모드 프 록 시 모드 는 하나의 대상 (예 를 들 어 B) 을 통 해 대상 (예 를 들 어 A) 에 게 '프 록 시' 를 제공 하 는 방식 으로 접근 하 는 데 자주 사용 되 는 디자인 모델 이다.예 를 들 어 한 대상 이 직접 인용 하기 어렵 고 대 리 는 이 대상 과 방문 자 사이 에서 중 개 를 했다.
먼저 생각해 보 세 요: 한 대상 이 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.__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()


추상 적 인 공장 모델 과 간단 한 공장 / 공장 방법 이 다 르 기 때문에 추상 적 인 공장 이 가장 잘 이해 할 수 있다. 예 를 들 어 두 개의 동물, 고양이 와 개, 그들 은 모두 speak 과 eat 의 function 을 가지 고 있 지만 그들 이 집행 한 결 과 는 서로 다른 '공장' 이 있다 는 것 이 분명 하 다.우리 가 대응 하 는 동물 을 찾 아 정확 한 조작 을 하도록 도와 주 는 유형 / 함 수 는 매개 변 수 를 통 해 우리 가 위의 이 공장 을 찾 을 수 있 도록 도와 줄 수 있다.  이것 이 바로 추상 공장 이다.

from abc import ABCMeta

class StandardFactory(object):
  '''         '''
  @staticmethod
  def get_factory(factory):
    '''              '''
    if factory == 'cat':
      return CatFactory()
    elif factory == 'dog':
      return DogFactory()
    raise TypeError('Unknown Factory.')


    dog               
class DogFactory(object):
  def get_pet(self):
    return Dog();


class CatFactory(object):
  #               ,        ,        
  def get_pet(self):
    return Cat();


#     dog cat       ,      
class Pet(object):
  # ABCMeta                   ,   [ABCMeta](http://docs.python.org/2/library/abc.html#abc.ABCMeta)
  __metaclass__ = ABCMeta
  def eat(self):
    pass


# Dog         
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()

  #     ,                 ,        
  factory = StandardFactory.get_factory('dog')
  pet = factory.get_pet()
  print pet.eat()

좋은 웹페이지 즐겨찾기