[디자인 모델] 창설 형 모델 의 공장 모델
1. 공장 방법:
import xml.etree.ElementTree as etree
import 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 parse_data(self):
return self.data
class XMLConnector:
def __init__(self, filepath):
self.tree = etree.parse(filepath)
@property
def parse_data(self):
return self.tree
def connection_factory(filepath):
if filepath.endswith('json'):
connector = JSONConnector
elif filepath.endswith('xml'):
connector = XMLConnector
else:
raise ValueError("Can't connect to {}".format(filepath))
return connector(filepath)
def connect_to(filepath):
factory = None
try:
factory = connection_factory(filepath)
except ValueError as e:
print(e)
return factory
def main():
sqlite_factory = connect_to('data/person.sq3')
print(sqlite_factory)
xml_factory = connect_to('data/person.xml')
xml_data = xml_factory.parsed_data
print(xml_data)
json_factory = connect_to('data/donut.json')
json_data = json_factory.parsed_data
print(json_data)
if __name__ == '__main__':
main()
상기 코드 를 통 해 알 수 있 듯 이 파일 의 해석 에 대해 같은 인 터 페 이 스 를 사용 하여 처리 (공장 방법의 주요 기능) 했 지만 되 돌아 오 는 구 조 는 일치 하지 않 기 때문에 서로 다른 방법 으로 해석 해 야 한다.
2. 추상 공장:
추상 적 인 공장 디자인 모델 은 추상 적 인 방법의 범 화 이다. 추상 적 인 공장 은 논리 적 으로 볼 때 공장 방법의 집합 이다. 그 중에서 모든 공장 방법 은 서로 다른 종류의 대상 을 만 드 는 것 을 책임 진다.
추상 적 인 공장 모델 은 대상 의 생 성 을 쉽게 추적 하고 대상 을 만 들 고 디 결합 을 사용 하여 메모리 점용 과 응용 성능 을 최적화 하 는 잠재력 을 제공 할 수 있다.
개발 과정 에서 보통 처음에는 공장 방법 을 사용 하 는데 그것 이 더욱 간단 하고 사용 하기 쉽 기 때문이다.만약 에 나중에 응용 에 많은 공장 방법 이 필요 하 다 는 것 을 발견 하면 일련의 대상 을 만 드 는 과정 을 합 쳐 더욱 합 리 적 이 고 추상 적 인 공장 을 도입 할 수 있다.
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 GameEnv:
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 = GameEnv(game(name))
environment.play()
상기 코드 를 통 해 알 수 있 듯 이
GameEnv
두 공장 방법 에 대한 포장 을 실현 했다. 이것 이 바로 여기 서 말 하고 자 하 는 추상 적 인 공장 의 핵심 이다.소결:
공장 모델 은 다음 과 같은 몇 가지 장면 에 사용 할 수 있다.
공장 방법 설계 모델 의 실현 은 그 어떠한 종류의 단일 함수 에 속 하지 않 고 단일 종류의 대상 의 창설 을 책임 진다.추상 적 인 공장 설계 모델 의 실현 은 같은 하나의 유형 에 속 하 는 여러 공장 방법 으로 일련의 관련 대상 을 만 드 는 데 사용 된다.
참고 자료:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.