본문 바로가기
스터디/Design Pattern

디자인 패턴 - 추상 팩토리 패턴 ( Abstract Factory Pattern )

by 헤콩 2020. 5. 30.
반응형

추상 팩토리 패턴 (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);
    }
}

출력

 

 

 

 

 

 

 

 

 

 

 

 

참고 :

 

[생성 패턴] 추상 팩토리 패턴(Abstract Factory Pattern) 이해 및 예제

이번에 살펴볼 디자인 패턴은 생성 패턴 중 하나인 추상 팩토리 패턴(Abstract Factory Pattern)입니다. 추상 팩토리 패턴은 이전 포스팅에서 살펴본 팩토리 패턴(Factory Pattern)과 유사한 패턴으로, 팩토�

readystory.tistory.com

 

반응형

댓글