함수식 프로그래밍 디자인 모델: 제2부분-공장 방법 모델

이 글은 함수식 프로그래밍 환경에서 디자인 모델을 활용한 시리즈의 두 번째 부분이다.더 많은 정보를 알고 싶으시면 계속해서 제 사이트를 주목해 주십시오.

소개하다.


본 시리즈의 첫 부분에서 언급한 바와 같이 소프트웨어 공학(SE)의 디자인 모델은 이미 4인방(GoF)이 작성한 이라는 책에서 널리 보급되었다.
이 문서에서는 설계 모델을 다음과 같은 문제 해결을 위한 모델로 분류합니다.

  • Creational - 단일 또는 다중 객체를 인스턴스화하는 방법을 제공하는 모델입니다.

  • 구조 모델 - 클래스와 대상 간의 관계를 정의하는 방법을 제공하는 모델이다.

  • 비헤이비어 - 클래스와 객체 간의 통신 방식을 정의하는 모드입니다.
  • 이전에 우리는 행위 모델을 연구했는데 이것은 일종의 행위 모델이다.
    this excellent page by Vince Huston를 사용하면 서로 다른 패턴의 분류에 대해 더 많은 정보를 얻을 수 있습니다.
    벤스의 주기표는 디자인 모델도를 계발했다.It's interactive too!
    본고에서 우리는 일종의 창조적 모델인 공장 방법 모델을 이해할 것이다.

    공장 방법 모델


    팩토리 메소드 디자인 모드 설명은 작성할 정확한 제품 클래스를 지정하지 않고 Creator 클래스에 팩토리 메소드를 공개합니다.factory 방법은 Creator 클래스가 제품의 실례화를 하위 클래스로 미루도록 허용합니다.

    아이고!다시 한 번 말하지만, 정말 한마디다.
    지난번처럼 이 정의를 분해합시다.여기에는 몇 가지 핵심 구성 요소가 있습니다.

  • Creator - 제품을 반환하는 공장 접근 방식을 정의하는 인터페이스 또는 추상 클래스입니다.

  • Product - 구체적인 제품에 추상층 인용의 인터페이스나 추상류를 제공합니다.

  • 공장 방법 - 구체적인 창조자가 실시하는 방법으로 되돌아갈 구체적인 제품을 지정하는 데 쓰인다.
  • 만약 이것이 사람을 곤혹스럽게 한다면 걱정하지 마라!몇몇 예를 통해 이것은 더욱 형상화하기 쉽다!

    소매점의 예


    앞의 글의 정신에 따라 우리는 같은 소매점 예시를 사용하지만 서로 다른 문제 배경에서 사용한다.
    만약 소매점에 대해 가정한다면, 우리는 우리의 업무를 더욱 잘 평가하기 위해 시뮬레이터를 도입하고 싶다.우리의 시뮬레이터에서 우리는 두 가지 다른'고객 모델'을 선택할 수 있다. 우리는 매우 나쁘고 까다로운 고객을 모의하거나 매우 좋고 친절한 고객을 모의할 수 있다.
    우리는 아날로그 코드의 나머지 부분에 영향을 주지 않는 상황에서 서로 다른 고객을 만드는 방식을 구별하기를 바란다.다음과 같이 공장 접근 방식 모델을 구현할 수 있습니다.
    interface CustomerCreator {
        public Customer createCustomer();
    }
    
    interface Customer {
        public boolean isGood();
    }
    
    class GoodCustomerCreator implements CustomerCreator {
        public Customer createCustomer() {
            return new GoodCustomer();
        }
    }
    
    class BadCustomerCreator implements CustomerCreator {
        public Customer createCustomer() {
            return new BadCustomer();
        }
    }
    
    class GoodCustomer implements Customer {
        public boolean isGood() {
            return true;
        }
    }
    
    class BadCustomer implements Customer {
        public boolean isGood() {
            return false;
        }
    }
    
    보시다시피 우리는 제품의 서로 다른 방식을 만들고 표시하는 논리적 결합을 쉽게 할 수 있습니다.다음과 같은 상황에서 이런 모델은 정말 이채를 띠게 될 것이다.

  • 제품을 만드는 방식이 갈수록 많아지고 있다.예를 들어, 우리 상점의 시뮬레이터에서, 우리는 현재 좋은 고객이나 나쁜 고객으로 무작위로 돌아가는 방식을 원한다.우리는 간단하게 RandomCustomerCreator를 만들고 무작위 논리를 봉인할 수 있다.부모 프로세스는 Creator 클래스에 대한 인용을 유지하기만 하면 됩니다.

  • 점점 더 많은 제품들이 있습니다.이와 유사하게, 우리는 새로운 고객을 위해 Customer 인터페이스를 실현하고, 거기에서 어떠한 추가 논리를 실현하기만 하면 된다.
  • 기능적 방법


    함수식 프로그래밍의 우호적인 방식으로 이루어진 전략 모델을 살펴보자.

    카레


    이런 모델에 대해 우리는'카레'라고 불리는 개념을 이용할 수 있다.Curry는 함수 프로그래밍과 수학에서 가장 흔히 볼 수 있는 개념으로 하나의 과정이다. 이 과정에서 여러 개의 매개 변수를 받아들이는 함수는 한 개의 매개 변수만 받아들이는 함수로 변환되고 더 많은 매개 변수를 받아들이는 다른 함수로 되돌아갈 수 있다.
    또 하나의 지루한 정의!간단히 예를 들어 살펴보겠습니다.
    세 개의 숫자를 더하는 함수를 구현합니다.
    const addMyTriple = (a, b, c) => {
        return a + b + c;
    }
    
    addMyTriple(1, 2, 3) // Returns 6.
    
    이 함수를 사용하면 다음과 같은 결과가 발생합니다.
    const addMyTriple = (a) => {
        return (b) => {
            return (c) => {
                return a + b + c;
            }
        }
    }
    addMyTriple(1)(2)(3) // Returns 6.
    
    이것은 보기에 하나의 예처럼 보인다. 우리는 단지 함수의 상세한 정도를 늘리고 있을 뿐이지, 그렇지 않니?그러나 관건은 우리가 매번 내부 함수로 되돌아오는 것을 의식하는 것이다.갑작스레, 이것은 매우 귀중하게 변했다. 왜냐하면 우리는currying을 사용하여 변수를 복원하고 다른 함수를 형성할 수 있기 때문이다.
    여기에 예가 하나 있다.가령 우리가 이전처럼 세 개의 숫자를 추가하고 싶다고 가정하지만, 지금 우리는 첫 번째 숫자를always10로 고정시키고 싶다.
    우리는 이렇게 간단하게 새로운 함수를 조합할 수 있다.
    const addMyDoublePlusTen = addMyTriple(10);
    
    addMyDoublePlusTen(2,3) // Returns 15.
    
    이제 공장 방법 모델의 실현에 적용합시다.
    const customerCreator = (isGood) => {
        return isGood ? goodCustomer : badCustomer;
    }
    
    const customer = (isGood) => {
        return {
            isGood: isGood
        };
    }
    
    const goodCustomerCreator = () => {
        return customerCreator(true);
    }
    
    const badCustomerCreator = () => {
        return customerCreator(false);
    }
    
    const goodCustomer = () => {
        return customer(true);
    }
    
    const badCustomer = () => {
        return customer(false);
    }
    
    보시다시피, 우리는 커리를 이용하여 서로 다른 창설자 함수의 유형을 구분합니다.우리도 고객을 위해 이렇게 한다.
    비록 이 예는 매우 직관적으로 보이지만 이 모델을 언제 사용하는지 이해하는 관건은 두 가지 관건적인 미세한 차이에 있다.

  • 당신은 어떻게 대상을 실례화하기를 원합니까?(순서, 구성, 구성 등)

  • 어떻게 서로 다른 유형의 대상을 표시합니까?(데이터 패브릭 등)
  • 설령 예시의 복잡성이 증가하고 있다 하더라도 (이것은 디자인 모델을 사용하는 전체 요점과 관련이 있다) 이런 모델은 논리적인 봉인성을 잘 유지할 수 있다는 것을 깨닫게 될 것이다.

    확장 예


    학습 과정을 촉진하기 위해 다음과 같은 몇 가지 문제와 이를 어떻게 실시할 것인지를 생각해 보세요.
  • 저희 시뮬레이터에서 10개의 고객 목록을 유지했다고 가정합니다.당신은 창조자의 좋은 날과 나쁜 날을 어떻게 실현할 것입니까?
  • 세 가지 유형의 고객이 있다면?(좋음, 나쁘음, 중성)
  • 다음


    이 글은 함수식 프로그래밍 환경에서 디자인 모델을 활용한 시리즈의 두 번째 부분이다.더 많은 정보를 알고 싶으시면 계속해서 제 사이트를 주목해 주십시오.

    좋은 웹페이지 즐겨찾기