디자인 패턴(II) - 팩토리 패턴

8496 단어
이전 편에서는 왜 디자인 패턴이 필요한지에 대한 아주 기본적인 개념과 팩토리 패턴의 기본을 공유했습니다.

팩토리 패턴을 사용하여 이전 게시물의 예와 같이 동일한 기능을 가진 객체를 생성합니다.

class User {
  constructor(name, age, career) {
    this.name = name
    this.age = age
    this.career = career
  }
}

function Factory(name, age, career) {
  let job
  switch(career) {
    case  "programmer":
     job = ['xxx', 'yyy', 'zzz']
    break;
    case  "accounting":
     job = ['abc', 'def', 'jkm']
    break;
    ...
  }
  return new User(name, age, career, job)
}


명백한 결함이 있습니다. 직업의 종류가 수백 가지이고 그 중 일부가 C급(CEO, CTO, CXO)인 경우 매우 다른 직업과 권한을 가지고 있습니다. Factory는 유지하기에는 너무 거대하고 복잡해집니다.

다른 사용자를 더 쉽게 만들 수 있는 방법을 생각할 수 있습니다. 청사진이 필요하고 이를 사용하여 추상 공장을 만들 수도 있습니다. 따라서 모든 실제 사용자는 추상 공장에서 만들어집니다...

예! 이것이 오늘의 메인 코스인 추상화입니다.

우리는 모든 직원이 자신의 이름, 나이, 경력을 가지고 있고 회사 시스템에 액세스할 수 있는 권한이 있다는 것을 알고 있습니다. 직원은 자신의 정보를 볼 수 있습니다. 인사 담당 직원은 모든 직원의 출석 기록을 볼 수 있으며 총지배인은 점점 더 많은 권한을 가질 수 있습니다.

**그러나 직원의 유형이 매우 다양하더라도 그들은 시스템의 사용자입니다.

따라서 추상 팩토리(UserFactory)에서

class UserFactory {
  constructor(name, age, career) {
    this.name = name
    this.age = age
    this.career = career
  }
  getPermission() {
    console.log("I am abstract factory")
  }
}


우리는 UserFactory 를 사용하지 않을 것입니다. 대신 구체적인 공장을 생성하는 데 사용하고 특정 권한이 있는 사용자를 지정할 수 있습니다.

class Programmer extends UserFactory {
  constructor(name, age, career) {
    super(name, age, career)
  }
  getPermission() {
    return new labPermission()
  }
}



class Permission {
  checkIdentity() {
    console.log("I am abstract product")
  }
}

class labPermission extends Permission {
  checkIdentity() {
    console.log("Identity checked, programmer")
  }
}



따라서 프로그래머가 랩에 액세스하려는 경우 다음을 수행할 수 있습니다.

const programmerOne = new Programmer()
//create programmer instance

const programmerPermission = programmerOne.getPermission()

programmerPermission.checkIdentity()
//Identity checked, programmer


따라서 어느 날 새 회계사가 사용자 권한을 생성하려면 UserFactory에서 클래스를 확장하기만 하면 됩니다. 우리는 그것을 수정하지 않으며 위에서 언급한 문제에 대해 걱정하지 않습니다(Factory는 유지하기에는 너무 크고 복잡해집니다.)

요약



추상 팩토리나 팩토리 메서드에 관계없이 시스템의 불변 부분과 가변 부분을 분리하려고 합니다.

추상화 팩토리에는 네 가지 핵심 요소가 있습니다.
  • 추상 팩토리: 청사진이며 개체의 모양을 정의하는 데 사용됩니다(이 경우에는 UserFactory).
  • 콘크리트 팩토리: 추상 팩토리에서 메서드와 기능을 상속합니다. 이 경우 실제 개체Programmer를 만드는 데 사용합니다.
  • 추상 제품: 우리의 경우 실제 권한을 생성하는 데 사용하기 때문에 추상 제품은 우리Permission입니다. 추상 팩토리와 동일하며 실제 객체를 생성하거나new 사용하지 않습니다.
  • 콘크리트 제품: labPermission . 프로그래머를 위한 실제 권한입니다.

  • 시간 내 주셔서 감사합니다. 의견이 있으시면 아래에 의견을 남겨주세요.

    좋은 웹페이지 즐겨찾기