파 이 썬 디자인 모델 - 공장 모델
13371 단어 pythonPython 디자인 모드공장 모드디자인 모드
공장 모델 은 소프트웨어 개발 에서 대상 을 만 드 는 디자인 모델 이다.
공장 모델 은 초 류 를 포함한다.이 초 류 는 어떤 대상 이 만 들 수 있 는 지 를 결정 하 는 것 이 아니 라 추상 화 된 인 터 페 이 스 를 제공 합 니 다.
이 방법 을 실현 하기 위해 서 는 공장 류 를 만 들 고 되 돌아 가 야 합 니 다.
프로그램 이 '형식' 을 입력 할 때 이 대상 을 만들어 야 합 니 다.이것 은 공장 모델 을 사용 했다.이러한 상황 에서 코드 는 공장 모델 을 바탕 으로 확장 가능 하고 유지 가능 한 코드 에 도달 할 수 있다.새로운 종 류 를 추가 하면 존재 하 는 종 류 를 수정 하지 않 고 새로운 종 류 를 만 들 수 있 는 하위 클래스 만 추가 합 니 다.
공장 방법
공장 방법 모델 에서 우 리 는 하나의 함 수 를 실행 하고 하나의 매개 변 수 를 전달 합 니 다 (정 보 를 제공 하여 우리 가 무엇 을 원 하 는 지 표시 합 니 다). 그러나 대상 이 어떻게 실현 되 고 대상 이 어디에서 왔 는 지 에 대한 세부 사항 을 요구 하지 않 습 니 다.
example: xml 및 json 파일 분석
class JSONConnector:
def __init__(self, filepath):
self.data = dict()
with open(filepath, mode = 'r', encoding = 'utf-8') as f:
self.data = json.load(f)
@property
def parsed_data(self):
return self.data
class XMLConnector:
def __init__(self, filepath):
self.tree = etree.parse(filepath)
@property
def parsed_data(self):
return self.tree
def connection_factory(filepath):
if filepath.endswith('json'):
connector = JSONConnector
elif filepath.endswith('xml'):
connector = XMLConnector
else :
raise ValueError('Cannot connect to {}'.format(filepath))
return connector(filepath)
def connect_to(filepath):
factory = None
try:
factory = connection_factory(filepath)
except ValueError as ve:
print(ve)
return factory
def main():
sqlite_factory = connect_to('data/person.sq3')
print()
xml_factory = connect_to('data/person.xml')
xml_data = xml_factory.parsed_data
liars = xml_data.findall(".//{}[{}='{}']".format('person',
'lastName', 'Liar'))
print('found: {} persons'.format(len(liars)))
for liar in liars:
print('first name: {}'.format(liar.find('firstName').text))
print('last name: {}'.format(liar.find('lastName').text))
[print('phone number ({})'.format(p.attrib['type']),p.text) for p in liar.find('phoneNumbers')]
print()
json_factory = connect_to('data/donut.json')
json_data = json_factory.parsed_data
print('found: {} donuts'.format(len(json_data)))
for donut in json_data:
print('name: {}'.format(donut['name']))
print('price: ${}'.format(donut['ppu']))
[print('topping: {} {}'.format(t['id'], t['type'])) for t in donut['topping']]
추상 공장
추상 적 인 공장 설계 모델 은 추상 적 인 방법의 일반화 이다.요약 하면 하나의 추상 적 인 공장 은 (논리 적) 공장 방법 으로 그 중의 모든 공장 방법 은 서로 다른 종류의 대상 을 만들어 내 는 것 을 책임 진다.
example:
class Frog:
def __init__(self, name):
self.name = name
def __str__(self):
return self.name
def interact_with(self, obstacle):
print('{} the Frog encounters {} and {}!'.format(self,
obstacle, obstacle.action()))
class Bug:
def __str__(self):
return 'a bug'
def action(self):
return 'eats it'
class FrogWorld:
def __init__(self, name):
print(self)
self.player_name = name
def __str__(self):
return '
\t------ Frog World ———'
def make_character(self):
return Frog(self.player_name)
def make_obstacle(self):
return Bug()
class Wizard:
def __init__(self, name):
self.name = name
def __str__(self):
return self.name
def interact_with(self, obstacle):
print('{} the Wizard battles against {} and {}!'.format(self, obstacle, obstacle.action()))
class Ork:
def __str__(self):
return 'an evil ork'
def action(self):
return 'kills it'
class WizardWorld:
def __init__(self, name):
print(self)
self.player_name = name
def __str__(self):
return '
\t------ Wizard World ———'
def make_character(self):
return Wizard(self.player_name)
def make_obstacle(self):
return Ork()
class GameEnvironment:
def __init__(self, factory):
self.hero = factory.make_character()
self.obstacle = factory.make_obstacle()
def play(self):
self.hero.interact_with(self.obstacle)
def validate_age(name):
try:
age = input('Welcome {}. How old are you? '.format(name))
age = int(age)
except ValueError as err:
print("Age {} is invalid, please try \
again…".format(age))
return (False, age)
return (True, age)
def main():
name = input("Hello. What's your name? ")
valid_input = False
while not valid_input:
valid_input, age = validate_age(name)
game = FrogWorld if age < 18 else WizardWorld
environment = GameEnvironment(game(name))
environment.play()
if __name__ == '__main__':
main()
응용 장면
두 가지 모델 은 모두 다음 과 같은 몇 가지 장면 에 사용 할 수 있다.
(a) 대상 의 생 성 을 추적 하려 는 경우
(b) 대상 의 생 성과 결합 을 사용 하려 고 할 때
(c) 응용 성능 과 자원 점용 을 최적화 하려 면.
공장 방법 설계 모델 의 실현 은 그 어떠한 종류의 단일 함수 에 도 속 하지 않 고 단일 한 종류의 대상 (하나의 모양, 하나의 연결 점 또는 다른 대상) 의 생 성 을 책임 진다.추상 적 인 공장 디자인 모델 의 실현 은 같은 하나의 유형 에 속 하 는 여러 공장 방법 으로 일련의 관련 대상 (한 대의 차 부품, 한 게임 의 환경 또는 다른 대상) 을 만 드 는 데 사용 된다.
예 출처: Python 디자인 모델 에 정통
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.