반응형
팩토리 패턴(Factory pattern)
-모든 팩토리 패턴에서는 객체 생성을 캡슐화한다.
-팩토리 메소드 패턴과 추상 팩토리 패턴이 존재한다.
-팩토리 메소드 패턴: 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는
서브 클래스에서 결정한다.
-추상 팩토리 패턴: 인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고도
생성할 수 있다. 추상 팩토리 패턴에는 팩토리 메소드 패턴이 포함될 수 있다.
-디자인 원칙 중 '추상화된 것에 의존하도록 만들어라. 구상 클래스에 의존하지 않도록 만든다.'에 기인한 패턴이다.
팩토리패턴의 핵심은 '클래스의 인스턴스를 만드는 것을 서브클래스에서 결정하도록 한다는 것이다.'
즉, new 키워드를 사용하는 부분을 서브클래스에 위임함으로서 객체 생성을 캡슐화하고 구상 클래스에 대한 의존성이
줄어 든다는 이점을 얻을 수 있다.
팩토리 메소드 패턴
객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브 클래스에서 결정하도록 하는 것.
팩토리 메소드 패턴은 팩토리 메소드는 객체를 생성해서 반환하는 것을 말한다. 즉, 결과값이 객체인 것이다.
Suit 팩토리 추상 클래스
public abstract class SuitFactory{
public abstract Suit createSuit(String type);
}
Suit 팩토리 추상 클래스를 구현한 Suit 팩토리 구현 클래스
public class TypeSuitFactory extends SuiFactory{
@Override
public createSuit(String type){
Suit suit = null;
switch(type){
case("space"):
suit = new SpaceSuit();
break;
case("hydro"):
suit = new HydroSuit();
break;
case("stealth"):
suit = new StealthSuit();
break;
default:
suit = new CombatSuit();
}
return suit;
}
}
추상 팩토리 패턴
추상 팩토리 패턴은 인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고도 생성할 수 있다고했다.
즉, 연관된 서브 클래스를 그룹화할 수 있고 이것은 이 그룹을 자유롭게 교체할 수 있는 패턴이라고 할 수 있다.
추상 팩토리 인터페이스
public interface SuitAbstractFactory{
// Suit는 위에서 정의한 추상 클래스
public Suit CreateSuit();
}
Suit 팩토리 클래스
public class CombatFactory implements SuitAbstractFactory{
@Override
public Suit createSuit(){
return new CombatSuit();
}
}
// Space
public class SpaceFactory implements SuitAbstractFactory{
@Override
public Suit createSuit(){
return new SpaceSuit();
}
}
// Stealth
public class StealthFactory implements SuitAbstractFactory{
@Override
public Suit createSuit(){
return new StealthSuit();
}
}
// 생략
팩토리 클래스를 파라미터로 받는 구현 클래스
public class SuitFactory{
public static Suit getSuit(SuitAbstractFactory suitAbstractFactory){
return suitAbstractFactory.createSuit();
}
}
팩토리 클래스를 파라미터로 받는 구현 클래스
public class SuitFactory{
public static Suit getSuit(SuitAbstractFactory suitAbstractFactory){
return suitAbstractFactory.createSuit();
}
}
반응형
'코딩' 카테고리의 다른 글
Provider 패턴 (0) | 2022.10.20 |
---|---|
Bloc Pattern (0) | 2022.10.20 |
빌더 패턴 (Builder pattern) (0) | 2022.10.20 |