1) 개요
팩토리 메소드 패턴은 클래스의 인스턴스를 만드는 것을 서브클래스에서 결정하도록 하는 패턴입니다.
- 장점
1. 구현 클래스 직접 접근보다 인터페이스 접근을 더 용이하게 해줍니다.
2. 클라이언트 클래스로부터 인스턴스 구현을 분리시켜 객체간의 의존성을 낮춰줍니다.
- 단점
1. 팩토리 메소드 패턴을 남용할 경우 인스턴스 생성 구조를 파악하기 복잡해집니다.
2) UML
3) 예제
1 2 3 4 5 6 7 8 9 | public abstract class Product { public abstract String getName(); public abstract int getPrice(); @Override public String toString() { return "product Name : " + getName(); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class Computer extends Product{ private String name; private int price; public Computer(String name, int price) { this.name = name; this.price = price; } public String getName() { return name; } public int getPrice() { return price; } @Override public String toString() { return "항목 :: " + this.name + ", 가격 :: "+ this.price; } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class Ticket extends Product { private String name; private int price; public Ticket (String name, int price) { this.name = name; this.price = price; } @Override public String getName() { return this.name; } @Override public int getPrice () { return this.price; } @Override public String toString() { return "항목 :: " + this.name + ", 가격 :: "+ this.price; } } | cs |
1 2 3 4 5 6 7 8 9 | public class ProductFactory { public static Product getProduct(String type, String name, int price) { if ("ticket".equals(type.toLowerCase())) return new Ticket(name, price); else if ("computer".equals(type.toLowerCase())) return new Computer(name, price); return null; } } | cs |
1 2 3 4 5 6 7 8 9 | public class Main { public static void main(String[] args) { Product ticket = ProductFactory.getProduct("ticket", "한국여행", 300000); Product computer = ProductFactory.getProduct("computer", "pc", 1500000); System.out.println(ticket.toString()); System.out.println(computer.toString()); } } | cs |
[Result]
1 2 | 항목 :: 한국여행, 가격 :: 300000 항목 :: pc, 가격 :: 1500000 | cs |
'IT > 디자인 패턴(Design Pattern)' 카테고리의 다른 글
확장-축소 패턴 (0) | 2024.02.28 |
---|---|
[디자인 패턴] 옵저버 패턴(Observer Pattern) (0) | 2019.02.15 |
[디자인 패턴] 인터프리터 패턴(Interpreter Pattern) (0) | 2019.02.15 |
[디자인 패턴] 전략 패턴(Strategy Pattern) (0) | 2019.02.15 |
[디자인 패턴] 상태 패턴(State Pattern) (0) | 2019.02.15 |