개발/Javascript(Typescript)
[디자인 패턴] 팩토리 패턴
piece5
2023. 8. 9. 22:51
출처
https://www.youtube.com/watch?v=kuirGzhGhyw
https://yceffort.kr/2021/01/nodejs-4-design-pattern#%ED%8C%A9%ED%86%A0%EB%A6%AC
https://devmoony.tistory.com/43
팩토리 패턴이란?
객체를 생성하는데 사용되는 인터페이스 또는 추상 클래스를 정의 하는 것이다.
각 클래스 인스턴스를 각각 만드는 대신에 비슷한 클래스 모아서 조건에 따라 인스턴스를 생성한다.
인스턴스 생성과 관련된 모든 코드가 한 곳(팩토리)에 있으므로 코드를 더 잘 꾸밀 수 있다.
function createImage(name){
if(name.match(/\.jpeg$/)){
return new JpegImage(name);
}else if(name.match(/\.gif$/)){
return new GifImage(name);
}else if(name.match(/\.png$/)){
return new PngImage(name);
}else{
throw new Exception('Unsupported format');
}
}
import Motorvehicle from './Motorvehicle'
import Aircraft from './Aircraf'
import Railvehicle from './Railvehicle'
const VehicleFactory = (type, make, model, year) => {
if (type === car) {
return new Motorvehicle('car', make, model, year)
} else if (type === airplane) {
return new Aircraft('airplane', make, model, year)
} else if (type === helicopter) {
return new Aircraft('helicopter', make, model, year)
} else {
return new Railvehicle('train', make, model, year)
}
}
module.exports = VehicleFactory
function Developer(name)
{
this.name = name;
this.type = "Developer";
}
function Tester(name)
{
this.name = name;
this.type = "Tester";
}
function EmployeeFactory()
{
this.create = (name, type) => {
switch(type)
{
case 1:
return new Developer(name);
break;
case 2:
return new Tester(name);
break;
}
}
}
function say()
{
console.log("Hi, I am " + this.name + " and I am a " + this.type);
}
const employeeFactory = new EmployeeFactory();
const employees = [];
employees.push(employeeFactory.create("Patrick",1));
employees.push(employeeFactory.create("John",2));
employees.forEach(e => {
say.call(e);
})