반응형
팩토리 패턴 (Factory Pattern)
- 생성 패턴 (Creational Pattern) 중 하나
=> 인스턴스를 만드는 절차를 추상화
=> 객체를 생성, 합성하는 방법이나 객체의 표현 방법을 시스템과 분리해줍니다.
=> 무엇이 생성되고, 누가 이것을 생성하는지, 어떻게 생성되는지, 언제 생성되는지 결정하는 데 있어서 유연성을 높일 수 있습니다.
- 객체 생성 처리를 서브 클래스로 분리하여 처리 => 캡슐화
- 클래스의 인스턴스를 만드는 시점을 서브 클래스로 미뤄요.
- 추상화 된 것에 의존하도록, 구상 클래스에 의존하지 않도록 합니다.
- 서로 간의 종속성을 낮추고, 결합도를 느슨하게 하며, 확장을 쉽게 합니다.
=> 예를 들어, PC 클래스에 대해 수정이 일어나더라도, 클라이언트는 알 수 없기 때문에 코드를 변경할 필요 없습니다.
- Factory pattern은 클라이언트와 구현 객체들 사이에 추상화 제공
1. 어떤 클래스가 자신이 생성해야하는 객체의 클래스를 예측할 수 없을 때 사용
2. 생성할 객체를 기술하는 책임을 자신의 서브클래스가 지정했으면 할 때 사용
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;
}
}
Factory Class ( Factory )
public class Factory {
public static Computer getComputer(String type, String ram, String hdd, String cpu) {
if (type.equalsIgnoreCase("PC")) {
return new PC(ram, hdd, cpu);
} else if (type.equalsIgnoreCase("Server")) {
return new Server(ram, hdd, cpu);
}
return null;
}
}
Main Class
public class FactoryMain {
public static void main(String[] args) {
Computer pc = Factory.getComputer("pc","2 GB","500 GB","2.4 GHz");
Computer server = Factory.getComputer("server","16 GB","1 TB","2.9 GHz");
System.out.println("Factory PC Config::"+pc);
System.out.println("Factory Server Config::"+server);
}
}
참고 :
반응형
'스터디 > Design Pattern' 카테고리의 다른 글
디자인 패턴 - 전략 패턴 (Strategy Pattern) (0) | 2020.05.31 |
---|---|
디자인 패턴 - 옵저버 패턴 (Observer Pattern) (0) | 2020.05.30 |
디자인 패턴 - 추상 팩토리 패턴 ( Abstract Factory Pattern ) (0) | 2020.05.30 |
디자인 패턴 - 싱글턴 패턴 (Singleton Pattern) (0) | 2020.05.30 |
디자인 패턴 - 프로토타입 패턴 (Prototype Pattern) (0) | 2020.05.29 |
댓글