예 를 들 어 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.__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()
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.