추상 공장 디자인 패턴
또한 ~으로 알려진
전부
의지
혈족 또는 부양 가족을 생성하기 위한 인터페이스 제공
구체적인 클래스를 지정하지 않고 객체.
설명
실제 사례
To create a kingdom we need objects with a common theme. Elven kingdom needs an Elven king, Elven castle and Elven army whereas Orcish kingdom needs an Orcish king, Orcish castle and Orcish army. There is a dependency between the objects in the kingdom.
평범한 말로
A factory of factories; a factory that groups the individual but related/dependent factories together without specifying their concrete classes.
위키백과 말한다
The abstract factory pattern provides a way to encapsulate a group of individual factories that have a common theme without specifying their concrete classes
프로그래밍 예제
위의 왕국 예를 번역합니다. 우선 우리는 객체에 대한 몇 가지 인터페이스와 구현을 가지고 있습니다.
왕국.
public interface Castle {
String getDescription();
}
public interface King {
String getDescription();
}
public interface Army {
String getDescription();
}
// Elven implementations ->
public class ElfCastle implements Castle {
static final String DESCRIPTION = "This is the Elven castle!";
@Override
public String getDescription() {
return DESCRIPTION;
}
}
public class ElfKing implements King {
static final String DESCRIPTION = "This is the Elven king!";
@Override
public String getDescription() {
return DESCRIPTION;
}
}
public class ElfArmy implements Army {
static final String DESCRIPTION = "This is the Elven Army!";
@Override
public String getDescription() {
return DESCRIPTION;
}
}
// Orcish implementations similarly -> ...
그런 다음 왕국 공장에 대한 추상화 및 구현이 있습니다.
public interface KingdomFactory {
Castle createCastle();
King createKing();
Army createArmy();
}
public class ElfKingdomFactory implements KingdomFactory {
public Castle createCastle() {
return new ElfCastle();
}
public King createKing() {
return new ElfKing();
}
public Army createArmy() {
return new ElfArmy();
}
}
public class OrcKingdomFactory implements KingdomFactory {
public Castle createCastle() {
return new OrcCastle();
}
public King createKing() {
return new OrcKing();
}
public Army createArmy() {
return new OrcArmy();
}
}
이제 우리는 관련 개체의 가족을 만들 수 있는 추상 공장을 갖게 되었습니다. 즉, Elven 왕국 공장은 Elven 성, 왕 및 군대 등을 만듭니다.
var factory = new ElfKingdomFactory();
var castle = factory.createCastle();
var king = factory.createKing();
var army = factory.createArmy();
castle.getDescription();
king.getDescription();
army.getDescription();
프로그램 출력:
This is the Elven castle!
This is the Elven king!
This is the Elven Army!
이제 우리는 다른 왕국 공장을 위한 공장을 설계할 수 있습니다. 이 예에서는 ElfKingdomFactory 또는 OrcKingdomFactory의 인스턴스 반환을 담당하는 FactoryMaker를 만들었습니다.
클라이언트는 FactoryMaker를 사용하여 원하는 콘크리트 팩토리를 생성할 수 있으며, 이는 차례로 다양한 콘크리트 객체(Army, King, Castle)를 생성합니다.
이 예제에서는 열거형을 사용하여 클라이언트가 요청할 왕국 공장 유형을 매개변수화했습니다.
public static class FactoryMaker {
public enum KingdomType {
ELF, ORC
}
public static KingdomFactory makeFactory(KingdomType type) {
switch (type) {
case ELF:
return new ElfKingdomFactory();
case ORC:
return new OrcKingdomFactory();
default:
throw new IllegalArgumentException("KingdomType not supported.");
}
}
}
public static void main(String[] args) {
var app = new App();
LOGGER.info("Elf Kingdom");
app.createKingdom(FactoryMaker.makeFactory(KingdomType.ELF));
LOGGER.info(app.getArmy().getDescription());
LOGGER.info(app.getCastle().getDescription());
LOGGER.info(app.getKing().getDescription());
LOGGER.info("Orc Kingdom");
app.createKingdom(FactoryMaker.makeFactory(KingdomType.ORC));
-- similar use of the orc factory
}
클래스 다이어그램
적용 가능성
다음과 같은 경우 추상 팩토리 패턴을 사용하십시오.
사용 사례 예
결과:
지도 시간
Abstract Factory Pattern Tutorial
알려진 용도
관련 패턴
학점
코드를 찾을 수 있습니다here.
에서 더 많은 디자인 패턴에 대해 알아보십시오.
Credit to Original Authors of this post:
Reference
이 문제에 관하여(추상 공장 디자인 패턴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ohbus/abstract-factory-design-pattern-2ajb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)