[디자인 모델] 창설 형 모델 의 공장 모델

4722 단어
공장 은 보통 두 가지 형식 이 있다. 하 나 는 공장 방법 (Factory Method) 이 고 서로 다른 입력 매개 변 수 를 서로 다른 대상 으로 되 돌려 주 는 방법 이다.다른 하 나 는 추상 적 인 공장 으로 일련의 사물 대상 을 만 드 는 공장 방법 이다.
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 두 공장 방법 에 대한 포장 을 실현 했다. 이것 이 바로 여기 서 말 하고 자 하 는 추상 적 인 공장 의 핵심 이다.
    소결:
    공장 모델 은 다음 과 같은 몇 가지 장면 에 사용 할 수 있다.
  • 추적 대상 의 생 성;
  • 대상 의 생 성과 사용 디 결합;
  • 응용 성능 과 자원 점용 최적화;

  • 공장 방법 설계 모델 의 실현 은 그 어떠한 종류의 단일 함수 에 속 하지 않 고 단일 종류의 대상 의 창설 을 책임 진다.추상 적 인 공장 설계 모델 의 실현 은 같은 하나의 유형 에 속 하 는 여러 공장 방법 으로 일련의 관련 대상 을 만 드 는 데 사용 된다.
    참고 자료:
  • 좋은 웹페이지 즐겨찾기