본문 바로가기
개발공부 일지/면접

팩토리 패턴(Factory Pattern)

by Box Cat 2023. 10. 3.
728x90
반응형

생성 패턴은 인스턴스를 만드는 절차를 추상화하는 패턴입니다.

 

 

팩토리 패턴은 객체를 생성하는 인터페이스는 미리 정의하되, 인스턴스를 만들 클래스의 결정은 서브 클래스 쪽에서 내리는 패턴입니다.

팩토리 패턴에서는 클래스의 인스턴스를 만드는 시점을 서브 클래스로 미룹니다.

이 패턴은 인스턴스화에 대한 책임을 객체를 사용하는 클라이언트에서 팩토리 클래스로 가져옵니다. 

abstract class PaymentProcessor {
  constructor(public amount: number) {}

  abstract processPayment(): void;
}

class PaypalProcessor extends PaymentProcessor {
  public processPayment(): void {
    console.log(`Process Paypal Payment: ${this.amount} `);
  }
}

class StripeProcessor extends PaymentProcessor {
  public processPayment(): void {
    console.log(`Process Stripe Payment: ${this.amount} `);
  }
}

class BankTransferProcessor extends PaymentProcessor {
  public processPayment(): void {
    console.log(`Process Bank Transfer: ${this.amount} `);
  }
}

class PaymentProcessorFactory {
  public createProcessor(type: "paypal" | "stripe" | "bank", amount: number) {
    switch (type) {
      case "paypal":
        return new PaypalProcessor(amount);
      case "stripe":
        return new StripeProcessor(amount);
      case "bank":
        return new BankTransferProcessor(amount);
    }
  }
}

const processorFactory = new PaymentProcessorFactory();

const paypalPayment = processorFactory.createProcessor("paypal", 200);
const stripPayment = processorFactory.createProcessor("stripe", 500);

paypalPayment.processPayment();
stripPayment.processPayment();

참고로, 팩토리 메서드 패턴은 각각 다른 객체들이 필요할 때 사용하며, 추상 팩토리 패턴은 서로 연관 있는 객체들의 조합이 필요할 때 사용하는 점에서 다릅니다.

 
 
728x90
반응형

댓글