디자인 패턴(II) - 팩토리 패턴
팩토리 패턴을 사용하여 이전 게시물의 예와 같이 동일한 기능을 가진 객체를 생성합니다.
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
. 프로그래머를 위한 실제 권한입니다. 시간 내 주셔서 감사합니다. 의견이 있으시면 아래에 의견을 남겨주세요.
Reference
이 문제에 관하여(디자인 패턴(II) - 팩토리 패턴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/isoscar/design-patternii-factory-pattern-j0e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)