C \ # 디자인 모델 (3) - 공장 방법 모델

머리말
간단 한 공장 모델 에서 간단 한 공장 모델 의 단점 을 말 하면 한 가 지 는 간단 한 공장 모델 시스템 이 확장 되 기 어렵 고 신제품 을 추가 하면 간단 한 공장 방법 을 수정 해 야 한다. 그러면 간단 한 공장 의 실현 논리 가 너무 복잡 하지만 본 주제 에 소개 한 공장 방법 모델 은 간단 한 공장 모델 에 존재 하 는 이 문 제 를 해결 할 수 있다.공장 모델 이 이 문 제 를 어떻게 해결 하 는 지 구체 적 으로 살 펴 보 자.
2. 공장 방법 모델 의 실현
공장 방법 모델 이 간단 한 공장 모델 을 해결 할 수 있 는 이 유 는 구체 적 인 제품 의 설립 을 하위 클래스 로 미 루 기 때문이다. 이때 공장 류 는 모든 제품 의 설립 을 책임 지지 않 고 구체 적 인 공장 이 반드시 실현 해 야 할 인 터 페 이 스 를 제시 하기 때문이다. 그러면 공장 방법 모델 은 시스템 이 공장 류 의 논 리 를 수정 하지 않 고 신제품 을 추가 하 는 것 을 허용 할 수 있다.이렇게 하면 간단 한 공장 모델 의 단점 도 극복 할 수 있다.다음은 공장 모델 의 구체 적 인 실현 코드 를 살 펴 보 겠 습 니 다.
namespace            
{
    /// 
    ///     
    /// 
    public abstract class Food
    {
        //        
        public abstract void Print();
    }
    /// 
    ///          
    /// 
    public class TomatoScrambledEggs : Food
    {
        public override void Print()
        {
            Console.WriteLine("       !");
        }
    }
    /// 
    ///        
    /// 
    public class ShreddedPorkWithPotatoes : Food
    {
        public override void Print()
        {
            Console.WriteLine("      ");
        }
    }
    /// 
    ///      
    /// 
    public abstract class Creator
    {
        //     
        public abstract Food CreateFoddFactory();
    }
    /// 
    ///         
    /// 
    public class TomatoScrambledEggsFactory:Creator
    {
        /// 
        ///             
        /// 
        /// 
        public override Food CreateFoddFactory()
        {
            return new TomatoScrambledEggs();
        }
    }
    /// 
    ///        
    /// 
    public class ShreddedPorkWithPotatoesFactory:Creator
    {
        /// 
        ///            
        /// 
        /// 
        public override Food CreateFoddFactory()
        {
            return new ShreddedPorkWithPotatoes();
        }
    }
    /// 
    ///      
    /// 
    class Client
    {
        static void Main(string[] args)
        {
            //           ()
            Creator shreddedPorkWithPotatoesFactory = new ShreddedPorkWithPotatoesFactory();
            Creator tomatoScrambledEggsFactory = new TomatoScrambledEggsFactory();
            //         
            Food tomatoScrambleEggs = tomatoScrambledEggsFactory.CreateFoddFactory();
            tomatoScrambleEggs.Print();
            //       
            Food shreddedPorkWithPotatoes = shreddedPorkWithPotatoesFactory.CreateFoddFactory();
            shreddedPorkWithPotatoes.Print();
            Console.Read();
        }
    } 
}

공장 방법 으로 이 루어 진 시스템 을 사용 하여 시스템 이 신제품 을 추가 해 야 할 때 우 리 는 다 형 성 을 이용 하여 시스템 의 확장 을 완성 할 수 있 고 추상 적 인 공장 류 와 구체 적 인 공장 의 코드 에 대해 어떠한 변경 도 할 필요 가 없다.예 를 들 어 우 리 는 '다 진 가지' 를 주문 하고 싶 습 니 다. 이때 우 리 는 다 진 가지 의 구체 적 인 공장 류 와 다 진 가지 류 만 정의 하면 됩 니 다.간단 한 공장 모델 에서 처럼 공장 류 의 실현 을 수정 하지 않 아 도 됩 니 다. 구체 적 인 코드 는 다음 과 같 습 니 다.
/// 
    ///        
    /// 
    public class MincedMeatEggplant : Food
    {
        /// 
        ///          
        /// 
        public override void Print()
        {
            Console.WriteLine("      ");
        }
    }
 /// 
    ///        ,           
    /// 
    public class MincedMeatEggplantFactory : Creator
    {
        /// 
        ///            
        /// 
        /// 
        public override Food CreateFoddFactory()
        {
            return new MincedMeatEggplant();
        }
    }
    /// 
    ///      
    /// 
    class Client
    {
        static void Main(string[] args)
        {
                   
            //             
            //               
            Creator minceMeatEggplantFactor = new MincedMeatEggplantFactory();
            //                   
            Food minceMeatEggplant = minceMeatEggplantFactor.CreateFoddFactory();
            minceMeatEggplant.Print();
            Console.Read();
        }
    }

3. 공장 방법 모델 의 UML 그림
공장 모델 의 구체 적 인 실현 을 설명 한 후에 공장 모델 중의 각종 UML 그림 을 살 펴 보 자.
UML 그림 을 통 해 알 수 있 듯 이 공장 방법 모델 에서 공장 류 와 구체 적 인 제품 류 는 평행 한 등급 구 조 를 가지 고 이들 은 일일이 대응 된다. UML 그림 에 대한 설명 은 다음 과 같다.
Creator 류: 추상 적 인 공장 역할 을 하려 면 모든 구체 적 인 공장 은 반드시 이 추상 적 인 유형 을 계승 해 야 한다.
Tomato Scrambled Eggs Factory 와 Shredded Pork With Potatoes Factory 류: 구체 적 인 공장 역할 을 하여 구체 적 인 제품 을 만 드 는 데 사용 합 니 다.
Food 류: 추상 적 인 제품 역할, 구체 적 인 제품 의 추상 적 인 유형. 모든 구체 적 인 제품 은 이런 유형 을 계승 해 야 한다.
Tomato Scrambled Eggs 와 Shredded Pork With Potatoes 류: 구체 적 인 제품 역할 을 하고 추상 적 인 제품 류 가 정의 에 대한 추상 적 인 방법 을 실현 하 며 구체 적 인 공장 류 에 의 해 만들어 지고 이들 은 일일이 대응 하 는 관 계 를 가진다.
넷 째,. NET 에서 공장 방법의 유형 을 실현 했다.
. NET 라 이브 러 리 에 도 공장 방법 을 실현 하 는 클래스 가 많 습 니 다. 예 를 들 어 Asp. net 에 서 는 처리 대상 이 요청 을 처리 하 는 데 구체 적 으로 사 용 됩 니 다. *. aspx 파일 을 요청 할 때 System. Web. UI. PageHandlerFactory 류 에 매 핑 됩 니 다. *. ashx 의 요청 은 System. Web. UI. Simple HandlerFactory 류 에 매 핑 됩 니 다.(이 두 종 류 는 모두 IHttpHandler Factory 인터페이스 에 계승 되 어 있 습 니 다) 이 점 에 대해 서 는 "C: \ Windows \ Microsoft. NET \ Framework \ v 4.0.30319 \ \ Config \ 웹 config" 파일 에서 관련 정 의 를 찾 을 수 있 습 니 다. 구체 적 인 정 의 는 다음 과 같 습 니 다.


            
            

다음은 공장 방법 모델 이 Asp. net 에서 어떻게 실현 되 는 지 구체 적 으로 살 펴 보 겠 습 니 다. Index. aspx 페이지 에 요청 을 하면 PageHandler Factory 에서 GetHandler 방법 으로 Index. aspx 대상 을 만 들 것 입 니 다. 이들 의 아 날로 그 관 계 는 다음 과 같 습 니 다.
총화
공장 방법 모델 은 대상 을 대상 으로 프로 그래 밍 하 는 다 형 성 을 통 해 대상 의 설립 을 구체 적 인 공장 으로 지연 시 켜 간단 한 공장 모델 에 존재 하 는 문제점 을 해결 하고 개방 폐쇄 원칙 (즉, 확장 개발, 수정 폐쇄) 에 도 잘 부합된다.

좋은 웹페이지 즐겨찾기