JavaScript 객체 지향 모드: 공장 모드

JavaScript 객체 지향 모드: 공장 모드

2022-06-01 last update

11 minutes reading JavaScript
조직 코드는 우리로 하여금 많은 고통을 면하게 할 것이다.Object Oriented programming의 특성을 사용하면 일부 디자인 모델을 사용하여 더 좋은 가독성을 실현하고 군더더기를 줄이며 추상적인 것을 만들 수 있다.그 중 하나는 공장 모델이다.
플랜트 모드는 DRY 방법을 따르는 객체 지향 모드입니다.말 그대로 대상 실례는 공장을 사용하여 우리를 위해 필요한 대상을 만드는 것을 통해 만들어진 것이다.
팩토리 모드 조립 alligator 대상을 사용하는 아주 간단한 예시를 보여 드리겠습니다.그러기 위해서는 먼저 alligator 부품을 제조하는 공장이 필요합니다.
class TailFactory {
  constructor(props) {
    this.tailLength = props.tailLength;
  }
};

class TorsoFactory {
  constructor(props) {
    this.color = props.color;
  }
};

class HeadFactory {
  constructor(props) {
    this.snoutLenth = props.snoutLenth;
  }
};
현재, 우리는 실제 공장류와 사용자 간의 중개로서 하나의 종류를 창설한다.이를 ReptilePartFactory라고 합니다.
class ReptilePartFactory {
  constructor(type, props) {
    if(type === "tail")
      return new TailFactory(props);
    if(type === "torso")
      return new TorsoFactory(props);
    if(type === "head")
      return new HeadFactory(props);
  }
};
이제 진정한 악어를 조립하고 ReptilePartFactory 를 사용하여 필요한 부품을 얻을 수 있습니다.
let alligator = {};
let alligatorProps = {
  tailLength : 2.5, 
  color: "green",
  snoutLenth: 1
};

//gets a tail from the tail factory
alligator.tail  = new ReptilePartFactory("tail", alligatorProps); 

//gets a torso from the torso factory
alligator.torso = new ReptilePartFactory("torso", alligatorProps);

//gets a head from the head factory
alligator.head  = new ReptilePartFactory("head", alligatorProps);
위의 도안을 보면 우리는 악어 모양의 물체를 만들기 위해 같은 ReptilePartFactory 부품을 사용할 수 있을 것 같다.배경 속의 공장은 최종 대상의 성질을 영원히 알 필요가 없다.
따라서 공장 모델을 사용하면 다음과 같은 이점을 얻을 수 있습니다.
  • 동적 객체 생성: 실행 시 객체 유형을 결정할 때 사용할 수 있습니다.
  • 추상: 사용자는 실제 대상의 구조 함수에 영원히 접근할 필요가 없다.
  • 재사용성/유지보수: 같은 공장에서 유사한 대상에 사용할 수 있으며, 대량의 코드를 변경하지 않고 새로운 대상 클래스를 쉽게 추가/삭제할 수 있습니다.
  • 현재 우리는 이미 공장 모델에 대해 약간의 이해를 얻었으니, 우리는 어떻게 더 좋은 공장 모델 코드를 작성하는지 토론합시다.
    위의 예시는if 사다리꼴 그림을 사용하여 사용자의 입력에 따라 어느 공장을 호출할지 결정합니다.이것은 간단한 실현으로 직관적이고 바꾸기 어렵다.만약 우리가 이후에 새로운 부품을 추가하려고 한다면, 우리는 어쩔 수 없이 방해할 것이다 ReptilePartFactory.이는 "소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장을 위해 개방되어야 하지만 수정을 위해 닫아야 한다"는 SOLID 원칙을 위반한 것입니다.
    우리는 공장 종류를 하나의 대상에 저장하고 필요한 부품을 키로 사용하여 필요한 부품 공장을 호출하는 것이 어떻습니까?우선, 우리는 반드시 공장을 등록해야 한다. 이것은 매우 간단하다.
    let registeredPartFactories = {};
    registeredPartFactories['tail'] = class TailFactory{
      ...
    };
    
    registeredPartFactories['torso'] = class TorsoFactory {
      ...
    };
    
    registeredPartFactories['head'] = class HeadFactory {
      ...
    };
    
    이제 추상층은 다음과 같이 공장을 호출할 수 있습니다.
    class ReptilePartFactory {
      constructor(type, props) {
        return new registeredPartFactories[type](props);
      }
    };
    
    이런 방법은 더욱 간결하여 ReptilePartFactory 중의 코드에 영향을 주지 않는 상황에서 공장을 확장할 수 있다.

    어쨌든


    또 다른 몇 가지 대상을 대상으로 하는 모델도 가독성과 질을 높일 수 있다.따라서factory 모드를 사용하기 전에 진정한 수요가 있는지 확인하십시오.유사한 유형의 대상을 반복적으로 만들려면 이 대상을 사용하여 새로운 실례를 만들고 논리를 만드는 데 어느 정도의 추상성을 제공해야 한다. 그렇다면 공장 모델은 좋은 선택이다.