반응형
추상 팩토리 패턴 (Abstract Factory Pattern)
- 생성 패턴 (Creational Pattern) 중 하나
=> 인스턴스를 만드는 절차를 추상화
=> 객체를 생성, 합성하는 방법이나 객체의 표현 방법을 시스템과 분리해줍니다.
=> 무엇이 생성되고, 누가 이것을 생성하는지, 어떻게 생성되는지, 언제 생성되는지 결정하는 데 있어서 유연성을 높일 수 있습니다.
- 팩토리 클래스에서 서브 클래스를 생성할 때 if-else 문을 쓰지 않아요. => 팩토리 패턴의 조건문으로부터 벗어납니다
- 구현보다 인터페이스를 위한 코드 접근법을 제공
- 서브 클래스를 확장하기 쉽게 할 수 있어요.
Super Class (Computer)
public abstract class Computer {
public abstract String getRAM();
public abstract String getHDD();
public abstract String getCPU();
@Override
public String toString() {
return "RAM: "+this.getRAM()+", HDD: "+this.getHDD()+", CPU: "+this.getCPU();
}
}
Sub Class 1 (PC)
public class PC extends Computer {
private String ram;
private String hdd;
private String cpu;
public PC (String ram, String hdd, String cpu) {
this.ram = ram;
this.hdd = hdd;
this.cpu = cpu;
}
@Override
public String getRAM() {
return this.ram;
}
@Override
public String getHDD() {
return this.hdd;
}
@Override
public String getCPU() {
return this.cpu;
}
}
Sub Class 2 (Server)
public class Server extends Computer {
private String ram;
private String hdd;
private String cpu;
public Server (String ram, String hdd, String cpu) {
this.ram = ram;
this.hdd = hdd;
this.cpu = cpu;
}
@Override
public String getRAM() {
return this.ram;
}
@Override
public String getHDD() {
return this.hdd;
}
@Override
public String getCPU() {
return this.cpu;
}
}
인터페이스 (ComputerAbFactory)
추상 팩토리 역할을 하는 인터페이스 또는 추상 클래스 (아래는 인터페이스)
public interface ComputerAbFactory {
public Computer createComputer();
}
구현 클래스 1 (PCFactory)
서브 클래스(PC)에 대한 팩토리 클래스
public class PCFactory implements ComputerAbFactory {
private String ram;
private String hdd;
private String cpu;
public PCFactory(String ram, String hdd, String cpu){
this.ram=ram;
this.hdd=hdd;
this.cpu=cpu;
}
@Override
public Computer createComputer() {
return new PC(ram,hdd,cpu);
}
}
구현 클래스 2 (ServerFactory)
서브 클래스(Server)에 대한 팩토리 클래스
public class ServerFactory implements ComputerAbFactory {
private String ram;
private String hdd;
private String cpu;
public ServerFactory(String ram, String hdd, String cpu){
this.ram=ram;
this.hdd=hdd;
this.cpu=cpu;
}
@Override
public Computer createComputer() {
return new Server(ram,hdd,cpu);
}
}
컨슈머 클래스 (ComputerFactory)
서브 클래스들을 생성하기 위해 클라이언트 코드에 접점으로 제공되는 클래스
public class ComputerFactory {
public static Computer getComputer(ComputerAbFactory factory){
return factory.createComputer();
}
}
Main Class
public class AbstractFactoryMain {
public static void main(String[] args) {
Computer pc = ComputerFactory.getComputer(new PCFactory("2 GB","500 GB","2.4 GHz"));
Computer server = ComputerFactory.getComputer(new ServerFactory("16 GB","1 TB","2.9 GHz"));
System.out.println("AbstractFactory PC Config::"+pc);
System.out.println("AbstractFactory Server Config::"+server);
}
}
참고 :
반응형
'스터디 > Design Pattern' 카테고리의 다른 글
디자인 패턴 - 전략 패턴 (Strategy Pattern) (0) | 2020.05.31 |
---|---|
디자인 패턴 - 옵저버 패턴 (Observer Pattern) (0) | 2020.05.30 |
디자인 패턴 - 팩토리 메소드 패턴 (Factory Method Pattern) (0) | 2020.05.30 |
디자인 패턴 - 싱글턴 패턴 (Singleton Pattern) (0) | 2020.05.30 |
디자인 패턴 - 프로토타입 패턴 (Prototype Pattern) (0) | 2020.05.29 |
댓글