Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Greedy
- JDBC
- kotlin
- 인프런
- 스프링
- AOP
- SpringBoot
- Exception
- Android
- springdatajpa
- 그리디
- Proxy
- QueryDSL
- JPQL
- 백준
- http
- Thymeleaf
- 스프링 핵심 원리
- Servlet
- Spring Boot
- pointcut
- java
- transaction
- 스프링 핵심 기능
- 김영한
- 자바
- spring
- 알고리즘
- db
- jpa
Archives
- Today
- Total
개발자되기 프로젝트
하위 클래스 위임 - Factory Method 본문
1. Factory Method Pattern??
- 인스턴스 작성을 하위 클래스에게 위임
- Template Method 패턴을 인스턴스 생성에 적용.
2. 의도 (Intent)와 동기(Motivation)
- 객체를 생성하기 위한 인터페이스를 정의하지만,
어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스에서 결정하게 함. - 여러 상황에 따라 각각 생성될 수 있는 객체에 대한 생성을 하위 클래스에 위임
- 생성과 관련된 동일한 메서드는 상위 클래스에서 처리
3. Class diagram
4. 객체 협력 (collaborations)
- Product
- 팩토리 메소드가 생성하는 객체의 인터페이스를 정의한다.
- ConcreteProduct
- Product 클래스에 정의된 인터페이스를 실제로 구현한다.
- Creator
- Product 타입의 객체를 반환하는 팩토리 메소드를 선언한다. Creator 클래스는 팩토리 메소드를 기본적으로 구현하는데, 이 구현에서는 ConcreateProduct 객체를 반환한다.
- Product 객체의 생성을 위해 팩토리 메소드를 호출한다.
- ConcreteCreator
- ConcreteProduct 의 인스턴스를 반환하기 위해 팩토리 메소드를 재정의 한다.
5. 중요한 결론 (consequence)
- 상황에 따라 다양한 인스턴스 생성을 할 수 있음
6. 예제
public abstract class Car {
String carType;
public String toString(){
return carType;
}
}
public class Santafe extends Car {
public Santafe() {
carType = "Santafe";
}
}
public class Sonata extends Car {
public Sonata() {
carType = "Sonata";
}
}
public abstract class CarFactory {
public abstract Car createCar(String name);
public abstract Car returnCar(String name);
public void numbering(){
System.out.println("numbering");
}
public void washCar(){
System.out.println("wash car");
}
public void sellCar(String name){
numbering();
createCar(name);
washCar();
}
}
public class HMCCarFactory extends CarFactory{
HashMap<String, Car> carMap = new HashMap<>();
@Override
public Car createCar(String name) {
Car car = null;
if (name == "Sonata"){
car = new Sonata();
}
else if (name == "Santafe"){
car = new Santafe();
}
return car;
}
//인스턴스 관리 기능
public Car returnCar(String name){
Car car = carMap.get(name);
if (car == null){
if (name.equals("Tomas")){
car = new Sonata();
}
else if (name.equals("James")){
car = new Santafe();
}
carMap.put(name,car);
}
return car;
}
}
public class CarTest {
public static void main(String[] args) {
CarFactory factory = new HMCCarFactory();
Car newCar = factory.createCar("Santafe");
System.out.println(newCar);
Car myCar1 = factory.returnCar("Tomas");
Car myCar2 = factory.returnCar("Tomas");
System.out.println(myCar1 == myCar2);
}
}
- 상황(조건) 에 따라 다양한 인스턴스 생성 가능.
7. GitHub : 211107 Factory Method Pattern
'Java > 디자인 패턴' 카테고리의 다른 글
기능의 선언과 구현을 분리 - Bridge (1) | 2021.11.08 |
---|---|
기능의 선언과 구현을 분리 - Strategy Pattern (0) | 2021.11.08 |
하위 클래스 위임 - Template Method (0) | 2021.11.07 |
인스턴스 생성 패턴 - Builder Pattern (0) | 2021.11.06 |
인스턴스 생성 패턴 - Abstract Factory Pattern (0) | 2021.11.04 |
Comments