python 디자인 모델 의 공장 모델

공장 모델 이해
간단 한 이해: 공장 모델 은 여전히 창설 형 디자인 모델 이다. 공장 으로서 제품 의 생산, 즉 대상 의 창설 에 관심 을 가진다. 우 리 는 공장 을 이용 하여 대상 을 창설 할 필요 가 없다. 우리 가 직접 대상 을 창설 할 필요 가 없다. 우 리 는 어떻게 대상 을 창설 하 는 지 이해 할 필요 가 없다. 공장 에 요구 만 하면 공장 이 당신 의 요구 에 따라당신 이 원 하 는 제품 을 생산 하고 그 에 상응하는 대상 을 주 는 모델 을 공장 모델 이 라 고 합 니 다.
공장 모델 장점:
  • 소나무 결합, 대상 의 생 성 은 클래스 에 독립 된 실현
  • 클 라 이언 트 는 생 성 대상 의 종 류 를 알 필요 가 없고 전달 해 야 할 인터페이스 만 알 면 방법 과 매개 변 수 는 필요 한 대상 을 만 들 수 있다
  • 공장 을 확장 하고 다른 유형의 대상 을 추가 하기 쉬 우 며 사용 자 는 매개 변 수 를 바 꾸 기만 하면 된다
  • 2. python 공장 모델 실현
    1. 단순 공장 모델
    class Apple:
        def eat(self):
            print("eat apple")
    
    class Banana:
        def eat(self):
            print("eat banana")
    
    class FruitFactory:
        def create_fruit(self, name):
            if name == "apple":
                return Apple()
            elif name == "banana":
                return Banana()
    
    if __name__ == '__main__':
        f = FruitFactory()
        apple = f.create_fruit("apple")
        banana = f.create_fruit("banana")
        apple.eat()
        banana.eat()

    설명: 먼저 사과 와 바나나 두 가 지 를 만 들 고 eat 방법 을 포함 한 과일 공장 류 를 만 들 고 create 가 있 습 니 다.fruit 방법, name 인 자 를 받 고 name 에 따라 최종 적 으로 어떤 대상 이 생 성 되 는 지 판단 합 니 다.
    하지만 이런 방식 은 여러 가지 과일 이 필요 하 다 면 create 를 수정 해 야 한 다 는 단점 이 있다.fruit 의 내용, 판단 조건 증가.
     
    2. 공장 방법 모델
    import abc
    
    
    class Apple:
        def eat(self):
            print("eat apple")
    
    
    class Banana:
        def eat(self):
            print("eat banana")
    
    
    class Pear:
        def eat(self):
            print("eat pear")
    
    
    class Factory():
        __meteclass__ = abc.ABCMeta
    
        @abc.abstractmethod
        def create_fruit(self):
            pass
    
    
    class AppleFactory(Factory):
        def create_fruit(self):
            return Apple()
    
    
    class BananaFactory(Factory):
        def create_fruit(self):
            return Banana()
    
    
    class PearFactory(Factory):
        def create_fruit(self):
            return Pear()
    
    
    if __name__ == '__main__':
        apple = AppleFactory().create_fruit()
        banana = BananaFactory().create_fruit()
        pear = PearFactory().create_fruit()
        apple.eat()
        banana.eat()
        pear.eat()
    

    설명: 이 모델 에 새로운 과일 이 나 오 면 하위 클래스 계승 공장 추상 류 를 한 번 더 쓰 고 하위 클래스 를 사용 하여 해당 하 는 인 스 턴 스 를 얻 을 수 있 습 니 다.
    이런 모델 은 원래 의 과일 류 에 껍질 을 씌 운 셈 이다. 개인 적 으로 이런 방식 의 장점 이 뚜렷 하지 않 거나 자신 이 이해 하지 못 했다 고 생각한다.유일 하 게 생각 나 는 것 은 과일 이름 을 수정 해 야 한다 면 두 곳 만 수정 하면 된다 는 것 이다.
    3. 추상 적 인 공장 모델
    새로운 수요 가 있다 면 노란색 과 녹색 과일 을 생산 하고 싶 습 니 다.
    import abc
    
    
    class GreenApple:
        def eat(self):
            print("eat green_apple")
    
    class YellowApple:
        def eat(self):
            print("eat yellow_apple")
    
    class GreenBanana:
        def eat(self):
            print("eat green_banana")
    
    class YellowBanana:
        def eat(self):
            print("eat yellow_banana")
    
    
    
    class Factory():
        __meteclass__ = abc.ABCMeta
    
        @abc.abstractmethod
        def create_green_fruit(self):
            pass
    
        @abc.abstractmethod
        def create_yellow_fruit(self):
            pass
    
    class AppleFactory(Factory):
        def create_green_fruit(self):
            return GreenApple()
        def create_yellow_fruit(self):
            return YellowApple()
    
    class BananaFactory(Factory):
        def create_green_fruit(self):
            return GreenBanana()
        def create_yellow_fruit(self):
            return YellowBanana()
    
    
    if __name__ == '__main__':
        apple = AppleFactory().create_green_fruit()
        banana = BananaFactory().create_yellow_fruit()
        apple.eat()
        banana.eat()
    
    

     
    참고 글:https://www.cnblogs.com/sfencs-hcy/p/10029960.html

    좋은 웹페이지 즐겨찾기