디자인 패턴 - 간단한 공장 패턴은 상세

간단한 공장 패턴 개념

  간단한 공장 패턴은 객체의 생성에 초점을 맞추고 창조적 디자인 패턴의 일부입니다.

  테이크 아웃 시간에 지점을, 당신은 Alipay의 마이크로 채널 지불, ApplePay 및 기타 지불 방법을 사용하도록 선택할 수 있습니다,의 지불의 시나리오를 생각해 보자.

  이 지불 이름이 동일하지 않지만, 그러나 사용과 실질적으로 유사한 절차, 정당성을 포함, 보안 검증 지불 암호를 확인하기 위해 계좌 결제 환경, 자동 이체 계좌를 확인, 사용자는 다른 기능의 결과를 통보 지불한다.

  일반적으로, 우리는 지불 서브 클래스의 모든 종류는, 다음 자신의 비즈니스 로직을 구현 상속, 추상 기본 클래스가 있습니다.

  우리는 이러한 지불 방법을 사용하려는 경우, 지불이 특정 서브 클래스의 이름을 알 필요가 없습니다, 지불은 이름을 알아야하는 메서드에 전달 된 이름이 시간에, 해당 개체를 반환, 당신은 사용할 수 있습니다 간단한 공장 패턴.

둘째, 실현

  1, 먼저 추상 클래스를 지불 다양한 방법을 정의 단순 정상, 지불, 사용자에게 알릴 수있는 여러 가지 방법 여부를 확인하는 계정을 정의합니다

네임 스페이스 SimpleFactory 
{ 
    사용하여 시스템; 

    공공  추상  클래스 AbstractPaymentMethod 
    { 
        ///  <요약> 
        /// 여부를 결정합니다 사용자의 계정 정상
         ///  </ 요약> 
        ///  <PARAM NAME = "이 accountNumber의"> 계정 </ PARAM> 
        / //  <반품> 일반 계정 </ 반환> 
        공공  추상적 인  BOOL IsAccountNormal ( 문자열 이 accountNumber의); 

        ///  <요약> 
        ///하는 사용자에게 알려
         ///  </ 요약> 
        ///  <PARAM NAME = "메시지">알림 내용 </ PARAM>
        공공  추상적  무효 NoticeUser ( 문자열 메시지); 

        ///  <요약> 
        /// 支付过程
         ///  </ 요약> 
        ///  <PARAM NAME = "이 accountNumber"> 用户账号</ PARAM> 
        ///  <PARAM NAME = "양"> 金额</ PARAM > 
        공공  가상  무효 지불 ( 문자열 이 accountNumber, 소수점 이하 금액) 
        { 
            경우 ( .IsAccountNormal (이 accountNumber)) 
            { 
                Console.WriteLine ($ ")
                 은이 .NoticeUser ($ ' , 성공적 {양} 위안 지불 친애하는 {이 accountNumber} " ) 
            } 
        } 
    } 
}

  Alipay의 달성 2, 마이크로 채널 유료

사용하여 시스템; 

네임 스페이스 SimpleFactory 
{ 
    공공  클래스 ALIPAY : AbstractPaymentMethod 
    { 
        공공  재정의  부울 IsAccountNormal ( 문자열 이 accountNumber) 
        { 
            반환  사실 ; 
        } 

        공공  재정의  무효 NoticeUser ( 문자열 메시지) 
        { 
            Console.WriteLine ( " 支付宝支付" ); 
            Console.WriteLine (메시지); 
        } 

    } 
}
사용하여 시스템; 

네임 스페이스 SimpleFactory 
{ 
    공공  클래스 WeiXinPay : AbstractPaymentMethod 
    { 
        공공  재정의  부울 IsAccountNormal ( 문자열 이 accountNumber는) 
        { 
            반환  사실 ; 
        } 

        공공  재정의  무효 NoticeUser ( 문자열 메시지) 
        { 
            Console.WriteLine ( " 微信支付" ); 
            Console.WriteLine (메시지); 
        } 
    } 
}

  3 다음은이 두 지불을 만드는 공장을 정의합니다. 공장 메소드는 필요한 결제를 결정하는 계수치 (PaymentMethodEnum)에 의해 결정된다 여기

네임 스페이스 SimpleFactory 
{ 
    사용하여 시스템; 

    공공  클래스 PaymentMethodFactory 
    { 
        공공  정적 AbstractPaymentMethod GetPaymentMethod (PaymentMethodEnum PAYMENTMETHOD) 
        { 
            스위치 (PAYMENTMETHOD) 
            { 
                경우 PaymentMethodEnum.AliPay :
                     반환  ) (ALIPAY을;
                사례 PaymentMethodEnum.WeiXinPay :
                     반환  (WeiXinPay을);
                기본 :
                     던져  새로운 (NotImplementedException을); 
            }
        } 
    } 
}

열거 클래스

공간 SimpleFactory 
{ 
    공개  열거 PaymentMethodEnum 
    { 
        ///  <요약> 
        /// Alipay의
         ///  </ 요약> 
        ALIPAY = 0 , 

        ///  <요약> 
        /// 마이크로 채널 결제
         ///  </ 요약> 
        WeiXinPay = . 1 
    } 
}

  4, 아날로그 클라이언트에 대한 호출

네임 스페이스 SimpleFactory 
{ 
    사용하여 시스템; 

    클래스 프로그램 
    { 
        정적  무효 메인 ( 문자열 []에 args) 
        { 
            AbstractPaymentMethod ALIPAY = PaymentMethodFactory.GetPaymentMethod (PaymentMethodEnum.AliPay); 
            AbstractPaymentMethod weiXinPay = PaymentMethodFactory.GetPaymentMethod (PaymentMethodEnum.WeiXinPay); 
            aliPay.Pay ( " 빈센트 " , 700M); 
            Console.WriteLine ( " ********************************* " ); 
            weiXinPay.Pay (" 123456 " , 1000M); 
            Console.ReadKey (); 
        } 
    } 
}

  5, 결과보고

  

셋째, 요약

  장점 간단한 공장 패턴 :

  • 공장 클래스는 고객이 제품을 직접 객체,하지만 "소비자"제품을 만들 책임이 면제 될 수 있습니다 어떤 시간에 만들어지는 제품 클래스의 어떤 예를 결정할 수 있습니다, 필요한 논리 판단을 포함, 책임의 연습을 통해 달성 간단한 공장 패턴을 객체를 생성하기위한 전문 공장 클래스를 제공하는 부문.
  • 클라이언트는, 해당 매개 변수가 될 수있는 특정 제품 클래스를 알고 일부 복잡한 클래스 이름에 대한 간단한 공장 패턴이 사용자 메모리의 양을 줄일 수 필요가 생성 된 클래스 이름 특정 제품 범주를 알 필요가 없습니다.
  • 구성 파일을 도입함으로써, 당신은 변경할 수 있습니다 및 클라이언트 측 코드를 수정하지 않고 새로운 특정 제품 카테고리를 추가하고 어느 정도 시스템의 유연성을 향상시킬 수 있습니다.

  간단한 공장 패턴의 단점 :

  • 팩토리 클래스는 모든 제품의 생성 논리를 중앙 집중화하기 때문에 작동하지 않습니다하면, 전체 시스템에 영향을 줄 수 있어야합니다.
  • 시스템에 팩토리 클래스의 수를 증가하는 간단한 모델을 사용하여, 복잡성과 특정 프로그램의 시스템을 이해의 어려움을 증가시킨다.
  • 새로운 제품이 공장을 수정하는 로직을 추가해야합니다 일단 시스템 확장이 어려운 제품의 많은 종류가있을 때, 식물 로직이 너무 복잡 시스템의 확장 및 유지 보수에 도움이되지 않습니다 원인이 될 수 있습니다.
  • 때문에 정적 팩토리 메소드의 사용에 간단한 공장 패턴, 공장의 역할을 초래하는 것은 상속에 따라 계층 구조를 형성 할 수 없습니다.

  위의 장점과 단점을 바탕으로, 간단한 공장 패턴은 다음과 같은 경우에 적용

  • 개체 팩토리 클래스는 상대적으로 작은 만들기위한 책임 : 적은 인해 생성 된 객체에 공장 방법이 너무 복잡한 비즈니스 로직을 발생하지 않습니다.
  • 클라이언트는 매개 변수 만 상관하지 않는 객체를 생성하는 방법, 팩토리 클래스를 통과 알고 : 클라이언트에만 해당 매개 변수의 유형을 알 필요가 기억 할 필요가 없습니다 창조의 세부 사항에 대한도 관리, 클래스의도 이름이 필요합니다.

  다운로드 코드 : https://github.com/hzhhhbb/SimpleFactory

넷째, 참조

  https://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/simple_factory.html#id2

       

추천

출처www.cnblogs.com/hzhhhbb/p/11406771.html