공장 3 형제의 [간단 한 공장 모델], [공장 방법 모델], [추상 적 인 공장 모델]

세 가지 공장 디자인 모델
  • [단순 공장 모델]
  • [공장 방법 모델]
  • [추상 공장 모델]
  • 제1 종: 단순 공장 모델
    1. [간단 한 공장 모델]
    간단 한 공장 모델 개념 (Simple Factory Pattern): 공장 류 를 정의 합 니 다. 매개 변수 에 따라 서로 다른 인 스 턴 스 를 되 돌 릴 수 있 습 니 다. 만들어 진 인 스 턴 스 는 보통 공 통 된 부모 클래스 를 가지 고 있 습 니 다.간단 한 공장 모드 에서 인 스 턴 스 를 만 드 는 방법 은 정적 (static) 방법 이기 때문에 간단 한 공장 모드 는 정적 공장 방법 (Static Factory Method) 모드 라 고도 부 르 며 클래스 생 성 모드 에 속한다.
    사례 분석
    간단 한 공장 모델 을 사용 하여 서로 다른 기하학 적 모양 (예 를 들 어 원형, 사각형, 삼각형 등) 을 만 들 수 있 는 그림 그리 기 도 구 를 설계 하고 모든 기하학 적 도형 은 draw () 를 그리고 erase () 를 지 우 는 두 가지 방법 을 가진다.
     먼저 인터페이스 클래스 를 정의 합 니 다.두 가지 방법 포함;그리 기;지우 기;
    
        interface Draws
        {
            //    
            void draw();
            //    
            void erase();
        }

    어떤 구체 적 인 제품 류 에서 이 Draws 인 터 페 이 스 를 계승 합 니 다.다음은 세 가지 도형 실현 방식 이다.
      //==============================================================
        //    :zhoupei
        //    :2019/2/18 14:12:11
        //     :Circular
        //    :V1.0.1  
        //    :            
        //==============================================================
        class Circular : Draws
        {
            public void draw()
            {
                Console.WriteLine("      ");
            }
            public void erase()
            {
                Console.WriteLine("      ");
            }
    
        }
    
    
     class Rectangle : Draws
        {
            //    
            public void draw()
            {
                Console.WriteLine("      ");
            }
            //    
            public void erase()
            {
                Console.WriteLine("      ");
            }
        }
    
      class Triangle: Draws
        {
            public void draw()
            {
                Console.WriteLine("       ");
            }
    
            public void erase()
            {
                Console.WriteLine("       ");
            }
        }

    공장 류, 정적 공장 방법 을 도형 처리 하기;
     class FigureFactory
        {
            //      
            public static Draws Getfigure(string figtype)
            {
                Draws dws = null;
                switch (figtype.ToLower())
                {
                    case "rectangle":
                        dws = new Rectangle();
                        break;
                    case "triangle":
                        dws = new Rectangle();
                        break;
                    case "circular":
                        dws = new Rectangle();
                        break;
                    default:
                        dws = null;
                        break;
                }
                return dws;
            }
        }

    클 라 이언 트 호출 방법 입 니 다. 전역 프로필 을 읽 는 방식 에 따라 경 로 를 가 져 옵 니 다.
    app. config 파일 추가 하기;경로 설정 하기;
    
    
      
          //    
      
    

    주 함수 호출 방법;
     static void Main(string[] args)
            {
                Draws dw;
                string figurestr = ConfigurationSettings.AppSettings["figureType"];
                dw = FigureFactory.Getfigure(figurestr);
                dw.draw();//   -   
                dw.erase();//   -   
                Console.ReadLine();
            }

    장단 점 총화:
     1. 주요 장점
           간단 한 공장 모델 의 주요 장점 은 다음 과 같다.
           (1) 공장 류 는 필요 한 판단 논 리 를 포함 하고 언제 어떤 제품 류 의 인 스 턴 스 를 만 들 것 인 지 를 결정 할 수 있다. 클 라 이언 트 는 제품 대상 을 직접 만 드 는 직책 을 면제 할 수 있 고 '소비' 제품 만 있 으 며 간단 한 공장 모델 은 대상 의 설립 과 사용 의 분 리 를 실현 할 수 있다.
           (2) 클 라 이언 트 는 만 든 구체 적 인 제품 류 의 유형 을 알 필요 가 없고 구체 적 인 제품 류 에 대응 하 는 매개 변수 만 알 면 된다. 복잡 한 유형 에 대해 간단 한 공장 모델 을 통 해 사용자 의 기억 량 을 어느 정도 줄 일 수 있다.
           (3) 설정 파일 을 도입 함으로써 그 어떠한 클 라 이언 트 코드 도 수정 하지 않 은 상태 에서 새로운 구체 적 인 제품 류 를 교체 하고 추가 하여 어느 정도 에 시스템 의 유연성 을 향상 시 킬 수 있다.
             2. 주요 단점
           간단 한 공장 모델 의 주요 단점 은 다음 과 같다.
           (1) 공장 류 가 모든 제품 의 창설 논리 에 집중 되 고 직책 이 너무 무 거 워 서 정상적으로 일 하지 못 하면 전체 시스템 이 영향 을 받 아야 한다.
           (2) 간단 한 공장 모델 을 사용 하면 반드시 시스템 중의 개 수 를 증가 시 키 고 시스템 의 복잡 도와 이해 난이 도 를 높 일 것 이다.
           (3) 시스템 확장 이 어렵 기 때문에 신제품 을 추가 하면 공장 논 리 를 수정 해 야 한다. 제품 유형 이 많 을 때 공장 의 논리 가 너무 복잡 하고 시스템 의 확장 과 유지 에 불리 할 수 있다.
           (4) 간단 한 공장 모델 은 정태 적 인 공장 방법 을 사 용 했 기 때문에 공장 역할 은 계승 을 바탕 으로 하 는 등급 구 조 를 형성 하지 못 한다. 
     
    두 번 째: 공장 방법 모델
    공장 방법 모델 개념: 공장 방법 모델 (Factory Method Pattern): 대상 을 만 드 는 인 터 페 이 스 를 정의 하여 하위 클래스 가 어떤 종 류 를 예화 할 지 결정 합 니 다.공장 방법 모델 은 하나의 사례 화 를 하위 클래스 로 지연 시 켰 다.공장 방법 모델 은 공장 모델 (Factory Pattern) 이 라 고도 부 르 며 가상 구조 기 모델 (Virtual Constructor Pattern) 또는 다 중 공장 모델 (Polymorphic Factory Pattern) 이 라 고도 부른다.공장 방법 모델 은 일종 의 창설 형 모델 이다.
    사례 분석: 공장 방법 모드 를 사용 하여 프로그램 을 설계 하여 다양한 유형의 그림 형식 을 읽 고 모든 그림 형식 에 대해 하나의 그림 판독 기 를 설계 합 니 다. 예 를 들 어 GIF 그림 판독 기 는 GIF 형식의 그림 을 읽 는 데 사용 되 고 JPG 그림 판독 기 는 JPG 형식의 그림 을 읽 는 데 사 용 됩 니 다.시스템 의 유연성 과 확장 성 을 충분히 고려 해 야 한다.
    우선 이미지 인터페이스 정의 즉 추상 적 인 제품 류 이다.코드 는 다음 과 같 습 니 다!
     /// 
        ///        
        ///     :         ,                ,            。
        /// 
        interface Imager
        {
            void GetImages();
        }

    그리고 추상 적 인 공장 류 를 정의 한다.코드 는 다음 과 같 습 니 다!
     interface ImagerFactory
        {
            Imager GetImagelist(); //       
        }

    현재 고객 의 요구 에 따라 JPG 형식의 그림 과 GIF 형식의 그림 을 각각 읽 어야 합 니 다.
    구체 적 인 제품 류
        //==============================================================
        //    :zhoupei
        //    :2019/2/18 11:45:23
        //     :GifImg
        //    :V1.0.1  
        //    :Gif   -          
        //==============================================================
        class GifImg : Imager
        {
            public void GetImages()
            {
                Console.WriteLine("  GIF  。");
            }
        }
    
        class JpgImg : Imager
        {
            public void GetImages()
            {
                Console.WriteLine("  Jpg  。");
            }
        }
    
     

    구체 적 인 제품 공장
     //==============================================================
        //    :zhoupei
        //    :2019/2/18 11:46:05
        //     :GifImgFactory
        //    :V1.0.1  
        //    :       
        //==============================================================
        class GifImgFactory : ImagerFactory  //        
        {
            public Imager GetImagelist()
            {
                Imager im = new GifImg();
                return im;
            }
        } 
        
    
    
        class JpgImgFactory : ImagerFactory
        {
            public Imager GetImagelist()
            {
                Imager im = new JpgImg();
                return im;
            }
        }

    클 라 이언 트 Main () 호출: 방식 은 상기 와 같 습 니 다.
    
    
      
        
      
    
      static void Main(string[] args)
            {
                ImagerFactory ifc;
                Imager img;
                string factStr = ConfigurationManager.AppSettings["imageFactory"];
                ifc = (JpgImgFactory)Assembly.Load("FactoryMethod").CreateInstance(factStr);
                img = ifc.GetImagelist();
                img.GetImages();
    
                Console.ReadLine();
            }

    공장 방법 모델 총화:
     1. 주요 장점
           공장 방법 모델 의 주요 장점 은 다음 과 같다.
           (1) 공장 방법 모델 에서 공장 방법 은 고객 이 필요 로 하 는 제품 을 만 드 는 데 사용 되 는 동시에 고객 에 게 어떤 구체 적 인 제품 류 가 실례 화 될 지 를 숨 겼 다. 사용 자 는 필요 한 제품 에 대응 하 는 공장 에 만 관심 을 가 져 야 한다. 세부 적 인 제품 류 의 유형 을 알 필요 가 없다.
           (2) 공장 역할 과 제품 역할 을 바탕 으로 하 는 다 형 디자인 은 공장 방법 모델 의 관건 이다.그것 은 공장 으로 하여 금 어떤 제품 의 대상 을 만 드 는 지 스스로 확정 할 수 있 게 하고, 이 대상 을 어떻게 만 드 는 지 에 대한 세부 사항 은 구체 적 인 공장 내부 에 완전히 밀봉 할 수 있다.공장 방법 모델 이 다 중 공장 모델 이 라 고도 불 리 는 이 유 는 모든 구체 적 인 공장 류 가 똑 같은 추상 적 인 부 류 를 가지 기 때문이다.
           (3) 공장 방법 모델 을 사용 하 는 또 다른 장점 은 시스템 에 신제품 을 넣 을 때 추상 적 인 공장 과 추상 적 인 제품 이 제공 하 는 인 터 페 이 스 를 수정 하지 않 아 도 되 고 클 라 이언 트 를 수정 하지 않 아 도 되 며 다른 구체 적 인 공장 과 구체 적 인 제품 을 수정 하지 않 아 도 된다 는 것 이다. 그러면 시스템 의 확장 성도 매우 좋아 지고 완전히 부합 된다.개폐 원칙.
     
          2. 주요 단점
         공장 방법 모델 의 주요 단점 은 다음 과 같다.
          (1) 신제품 을 추가 할 때 새로운 구체 적 인 제품 류 를 작성 해 야 하고 이에 대응 하 는 구체 적 인 공장 류 를 제공 해 야 한다. 시스템 에 있 는 류 의 개 수 는 쌍 을 이 루어 증가 하고 어느 정도 에 시스템 의 복잡 도 를 증가 하 며 더 많은 류 는 컴 파일 과 운영 이 필요 하 며 시스템 에 추가 적 인 비용 을 가 져 다 줄 것 이다.
          (2) 시스템 의 확장 성 을 고려 하여 추상 층 을 도입 해 야 하기 때문에 클 라 이언 트 코드 에서 모두 추상 층 을 사용 하여 정 의 를 내 려 시스템 의 추상 성과 이해 난이 도 를 증가 시 켰 고 실현 할 때 DOM, 반사 등 기술 을 사용 하여 시스템 의 실현 난이 도 를 증가 시 켰 다.
     
    제3 중: 추상 적 인 공장 모델
    추상 적 인 공장 모델 개요: 일련의 관련 되 거나 서로 의존 하 는 대상 을 만 드 는 인 터 페 이 스 를 제공 합 니 다. 구체 적 인 종 류 를 지정 할 필요 가 없습니다. 추상 적 인 공장 모델 은 Kit 모델 이 라 고도 부 르 는데 대상 생 성 모델 입 니 다.
    사례 분석: 한 소프트웨어 회사 가 새로운 모 바 일 게임 소프트웨어 를 출시 하려 고 한다. 이 소프트웨어 는 Symbian, Android 와 Windows Mobile 등 여러 스마트 폰 운영 체제 플랫폼 을 지원 하고 서로 다른 모 바 일 운영 체제 에 대해 서로 다른 게임 조작 제어 (OperationController) 류 와 게임 인터페이스 제어 (InterfaceController) 를 제공 할 수 있다.클래스, 그리고 해당 하 는 공장 클래스 를 제공 하여 이러한 종류의 초기 화 과정 을 봉인 합 니 다. 소프트웨어 는 새로운 운영 체제 플랫폼 을 지원 하기 위해 비교적 좋 은 확장 성 을 요구 합 니 다. 상기 수 요 를 만족 시 키 기 위해 추상 적 인 공장 모델 로 이 를 디자인 해 보십시오.
    구체 적 인 실현:
    //     
      interface Android
        {
            void Description();
        }
    
      interface Apple
        {
            void Description();
        } 
    
      interface ASymbian
        {
            void Description();
        }

    추상 공장 클래스:
    /// 
        ///           
        /// 
        interface GameFactory
        {
            ASymbian CanRunonSymbian();
            Android CanRunonAndroid();
            Apple CanRunonApple();
        }

    구체 적 인 제품 류
        //==============================================================
        //    :zhoupei
        //    :2019/2/18 16:08:35
        //     :InterfaceControllerOnAndroid
        //    :V1.0.1  
        //    :      InterfaceControllerOnAndroid
        //==============================================================
        class InterfaceControllerOnAndroid : Android
        {
            public void Description()
            {
                Console.WriteLine("      InterfaceControllerOnAndroid      ");
            }
        }
    
        class InterfaceControllerOnApple : Apple
        {
            public void Description()
            {
                Console.WriteLine("     InterfaceController      ");
            }
        }
    
        class InterfaceControllerOnSymbian :ASymbian
        {
            public void Description()
            {
                Console.WriteLine("      InterfaceController      ");
            }
        }
    
    
    
    
    
        //==============================================================
        //    :zhoupei
        //    :2019/2/18 16:07:45
        //     :OperationControllerOnAndroid
        //    :V1.0.1  
        //    :  OperationController 
        //==============================================================
        class OperationControllerOnAndroid :Android
        {
            public void Description()
            {
                Console.WriteLine("      OperationControllerOnAndroid      ");
            }
        }
    
        class OperationControllerOnApple : Apple
        {
            public void Description()
            {
                Console.WriteLine("      OperationController      ");
            }
        } 
    
        class OperationControllerOnSymbian : ASymbian
        {
            public void Description()
            {
                Console.WriteLine("      OperationController      ");
            }
        }
    
    

    구체 적 인 공장 종류:
        //==============================================================
        //    :zhoupei
        //    :2019/2/18 16:10:59
        //     :B_InterfaceController
        //    :V1.0.1  
        //    :
        //==============================================================
        class B_InterfaceController : GameFactory
        {
            public Android CanRunonAndroid()
            {
                return new InterfaceControllerOnAndroid();
            }
    
            public Apple CanRunonApple()
            {
                return new InterfaceControllerOnApple();
            }
    
            public ASymbian CanRunonSymbian()
            {
                return new InterfaceControllerOnSymbian();
            }
    
        }
    
    
        class B_OperationController : GameFactory
        {
            public Android CanRunonAndroid()
            {
                return new OperationControllerOnAndroid();
            }
    
            public Apple CanRunonApple()
            {
                return new OperationControllerOnApple();
            }
    
            public ASymbian CanRunonSymbian()
            {
                return new OperationControllerOnSymbian();
            }
        }

    추상 공장 모델 총화
        1. 주요 장점
           추상 적 인 공장 모델 의 주요 장점 은 다음 과 같다.
           (1)추상 적 인 공장 모델 은 구체 적 인 유형의 생 성 을 격 리 시 켜 고객 이 무엇 을 만 들 었 는 지 알 필요 가 없다. 이러한 격 리 로 인해 구체 적 인 공장 을 바 꾸 는 것 이 상대 적 으로 쉬 워 지고 모든 구체 적 인 공장 은 추상 적 인 공장 에서 정의 하 는 공공 인 터 페 이 스 를 실현 하기 때문에 구체 적 인 공장 의 사례 만 바 꾸 면 전체 소프트웨어 시스템 의 행 위 를 어느 정도 바 꿀 수 있다.
           (2) 한 제품 족 중의 여러 대상 이 함께 일 하도록 설계 되 었 을 때 클 라 이언 트 가 항상 같은 제품 족 중의 대상 만 사용 하도록 보장 할 수 있다.
           (3) 새로운 제품 족 을 늘 리 는 것 이 편리 하고 기 존 시스템 을 수정 하지 않 아 도 되 며 '개폐 원칙' 에 부합 한다.
     
           2. 주요 단점
           추상 적 인 공장 모델 의 주요 단점 은 다음 과 같다.
           새로운 제품 의 등급 구 조 를 늘 리 는 데 번 거 로 움 은 기 존의 시스템 에 대해 비교적 큰 수정 을 해 야 하고 심지어 추상 적 인 층 코드 를 수정 해 야 한다. 이것 은 분명히 비교적 큰 불편 을 가 져 와 '개폐 원칙' 에 위배 된다.
     
     
     
    세 가지 공장 방식 의 학습 총화 가 끝 났 으 니 지적 과 지 도 를 환영 합 니 다.
    제 대학 선생님 인 을 공부 하고 은사 님 께 감 사 드 립 니 다.
     
     
     

    좋은 웹페이지 즐겨찾기