디자인 모드 의 공장 방법 모드 를 사용 하여 C\#프로 그래 밍 의 예제 설명 을 진행 합 니 다.

8218 단어 C#디자인 모드
간단 한 소개
공장 방법 모델 은 무엇 입 니까?왜 공장 방법 모델 이 있어 야 합 니까?간단 한 공장 모델 이 있 지 않 습 니까?두 모델 모두 공장 이 있 는데,그것 은 어떤 차이 가 있 습 니까?공장 방식 모델 은 어떻게 실현 되 었 습 니까?OK,이 문제 들 을 가지 고 다음 문장 을 계속 보 세 요.
공장 방법 모델 은 간단 한 공장 모델 에 대한 확장 으로 간단 한 공장 모델 의 단점 을 보완 하 는 데 쓰 인 다 고 할 수 있 습 니 다.어떤 단점 이 있 습 니까?이전 글 에 서 는 이미 확장 성 이 매우 떨어진다 고 말 했다.간단 한 공장 모델 에서 이사회 가 판다 장난감 이라는 장난감 을 추가 하기 로 결정 하면 공장 전체 가 해 야 할 일 은 무엇 일 까?
1.판매 매니저 에 게 판다 장난감 을 추가 하려 고 합 니 다.사용자 에 게 제공 할 수 있 습 니 다.
2.공장 작업장 에 가서 판다 공 구 를 만 들 라 고 한다.
현실 생활 에서 확실히 그렇다.현실 생활 에서 이렇게 하 는 것 은 큰 영향 을 미 치지 않 지만 프로그램 세계 에서 큰 일이 다.먼저 이렇게 하면 공장 작업장 의 내부 구 조 를 파괴 하고 BUG 를 초래 할 수 있다.그리고 이렇게 바 꾸 는 것 은 소스 코드 를 수정 하고 새로운 도 구 를 계속 추가 하 며 소스 코드 를 계속 수정 하 는 것 과 같다.장난감 100 개 를 추가 하면 그 판단 명령 에는 몇 개의 케이스 가 있어 야 할 지 생각해 본 적 이 있 습 니까?프로그램 안의 서로 다른 현실 생활 에서 새로운 큰 공장 을 세 우 는 것 은 돈 을 쓰 지 않 는 다.그래서 이 특징 을 잘 사용 하려 면 다음 에 우 리 는 지난 글 에서 장난감 공장 을 대규모 개조 하여 공사 방법 모델 을 실현 하도록 하 겠 습 니 다!!!!
설 레 지?나 도 설 레 지...
먼저,장난감 공장 의 원래 주 소 는 지휘소 로 바 뀌 었 고 새로운 공장 의 설립 을 전문 적 으로 지휘 한 다음 에 지휘소 부근 에 세 개의 소형 공장 을 신 설 했다.장난감 고양이 공장,장난감 개 공장,장난감 판다 공장 이다.각자 의 작업장 은 각자 의 장난감 만 만 들 줄 안다.지휘 전에 장난감 생산 계획서 가 있 는데 모든 소형 공장 은 지휘부 의 업무 계획서 에 따라 장난감 을 만들어 야 한다.자,이렇게 간단 하고 새로운 공장 개발 모델 이 나 왔 습 니 다.이렇게 하 는 장점 은 무엇 입 니까?악어 장난감 을 새로 제공 하면 무엇 을 해 야 하 는 지 살 펴 보 자.
1.작은 공장(악어 공장)신 설
2.지휘부 에 가서 악어 에 게 계획서 의 기본 기능 을 물 어보 자(그래 야 심사 에 통과 해서 온라인 으로 판매 할 수 있다)
2.악어 공장 은 악어 제작 안내 서 를 직접 구 매해 악어 장난감 을 만든다.
지금 은 절 차 를 밟 아 이 일 을 한다 면 그야말로..................................................................고객 이 장난감 을 사 러 왔 을 때 그들 은 지휘소 에 가서 강아지 한 마 리 를 달라 고 말 했다.지휘 소 는 돈 을 준 후에 어디 에 가서(강아지 공장)를 가 져 오 라 고 말 한 후에 고객 이 가서 가 져 가면 된다 고 말 했다.
공장 방법 모델 의 실현
공장 방법 모델 이 간단 한 공장 모델 을 해결 할 수 있 는 이 유 는 구체 적 인 제품 의 설립 을 하위 클래스 로 미 루 기 때문이다.이때 공장 류 는 모든 제품 의 설립 을 책임 지지 않 고 구체 적 인 공장 이 반드시 실현 해 야 할 인 터 페 이 스 를 제시 하기 때문이다.그러면 공장 방법 모델 은 시스템 이 공장 류 의 논 리 를 수정 하지 않 고 신제품 을 추가 하 는 것 을 허용 할 수 있다.이렇게 하면 간단 한 공장 모델 의 단점 도 극복 할 수 있다.다음은 공장 모델 의 구체 적 인 실현 코드 를 살 펴 보 겠 습 니 다.
namespace 디자인 모델 의 공장 방법 모델

{
  /// <summary>
  ///     
  /// </summary>
  public abstract class Food
  {
    //        
    public abstract void Print();
  }
  /// <summary>
  ///          
  /// </summary>
  public class TomatoScrambledEggs : Food
  {
    public override void Print()
    {
      Console.WriteLine("       !");
    }
  }
  /// <summary>
  ///        
  /// </summary>
  public class ShreddedPorkWithPotatoes : Food
  {
    public override void Print()
    {
      Console.WriteLine("      ");
    }
  }
  /// <summary>
  ///      
  /// </summary>
  public abstract class Creator
  {
    //     
    public abstract Food CreateFoddFactory();
  }
  /// <summary>
  ///         
  /// </summary>
  public class TomatoScrambledEggsFactory:Creator
  {
    /// <summary>
    ///             
    /// </summary>
    /// <returns></returns>
    public override Food CreateFoddFactory()
    {
      return new TomatoScrambledEggs();
    }
  }
  /// <summary>
  ///        
  /// </summary>
  public class ShreddedPorkWithPotatoesFactory:Creator
  {
    /// <summary>
    ///            
    /// </summary>
    /// <returns></returns>
    public override Food CreateFoddFactory()
    {
      return new ShreddedPorkWithPotatoes();
    }
  }
  /// <summary>
  ///      
  /// </summary>
  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();
    }
  }
}
공장 방법 으로 이 루어 진 시스템 을 사용 하여 시스템 이 신제품 을 추가 해 야 할 때 우 리 는 다 형 성 을 이용 하여 시스템 의 확장 을 완성 할 수 있 고 추상 적 인 공장 류 와 구체 적 인 공장 의 코드 에 대해 어떠한 변경 도 할 필요 가 없다.예 를 들 어 우 리 는'다 진 가지'를 주문 하고 싶 습 니 다.이때 우 리 는 다 진 가지 의 구체 적 인 공장 류 와 다 진 가지 류 만 정의 하면 됩 니 다.단순 공장 모델 에서 처럼 공장 류 의 실현 을 수정 하지 않 아 도 된다.구체 적 인 코드 는:

/// <summary>
  ///        
  /// </summary>
  public class MincedMeatEggplant : Food
  {
    /// <summary>
    ///          
    /// </summary>
    public override void Print()
    {
      Console.WriteLine("      ");
    }
  }
 /// <summary>
  ///        ,           
  /// </summary>
  public class MincedMeatEggplantFactory : Creator
  {
    /// <summary>
    ///            
    /// </summary>
    /// <returns></returns>
    public override Food CreateFoddFactory()
    {
      return new MincedMeatEggplant();
    }
  }
  /// <summary>
  ///      
  /// </summary>
  class Client
  {
    static void Main(string[] args)
    {
          
      //             
      //               
      Creator minceMeatEggplantFactor = new MincedMeatEggplantFactory();
      //                   
      Food minceMeatEggplant = minceMeatEggplantFactor.CreateFoddFactory();
      minceMeatEggplant.Print();
      Console.Read();
    }
  }

공장 방법 모드 UML 그림
공장 모델 의 구체 적 인 실현 을 설명 한 후에 공장 모델 중의 각종 UML 그림 을 살 펴 보 자.
2016217142103490.png (834×328)
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.PageHandler Factory 류 에 매 핑 되 어 처 리 됩 니 다.*.ashx 에 대한 요청 은 System.Web.UI.Simple HandlerFactory 류 에 비 칩 니 다.(이 두 종 류 는 모두 IHttp HandlerFactory 인터페이스 에 계승 되 어 있 습 니 다)이 점 에 대해 서 는"C:\Windows\Microsoft.NET\Framework\v 4.0.30319\\Config\웹.Config"파일 에서 관련 정 의 를 찾 을 수 있 습 니 다.구체 적 으로 정 의 는 다음 과 같 습 니 다.

<httpHandlers>
<add path="*.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="True" />
      <add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="True" />
      <add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True" />
</httpHandlers>
다음은 공장 방법 모델 이 Asp.net 에서 어떻게 실현 되 는 지 구체 적 으로 살 펴 보 겠 습 니 다.Index.aspx 페이지 에 요청 을 하면 PageHandler Factory 에서 GetHandler 방법 으로 Index.aspx 대상 을 만 들 것 입 니 다.이들 의 아 날로 그 관 계 는 다음 과 같 습 니 다.
2016217142153566.png (933×433)
총결산
공장 방법 모델 은 대상 을 대상 으로 프로 그래 밍 하 는 다 형 성 을 통 해 대상 의 설립 을 구체 적 인 공장 으로 지연 시 켜 간단 한 공장 모델 에 존재 하 는 문제점 을 해결 하고 개방 폐쇄 원칙(즉,확장 개발,수정 폐쇄)에 도 잘 부합된다.

좋은 웹페이지 즐겨찾기