객체를 생성하기 위해서 사용하는 디자인 패턴입니다.
제가 이해한 점은 하나의 객체를 다양한 방식으로 만들 때 각각 만드는 방식에 따라서 기능을 독립시켜서 구현하기 위해서 사용하는 패턴입니다. 예를 들면 멀티 플랫폼으로 모바일과 PC에서 모두 배포하고 싶은 서비스가 있을 때 각각의 공통 기능에 대하여 별도로 구현이 필요할 때 사용하는 패턴입니다.
PC(Desktop), 모바일(Mobile)의 멀티 플랫폼에서 각각 버튼을 만들고 클릭하기 위한 UML을 그려봤습니다.
추상 클래스, 인터페이스 모두 상속받을 클래스에게 구현 명세를 전달하기 때문에 MyDialog, Button 클래스를 추상 클래스로 구현했습니다.
//Main
public class Main {
public static void main(String[] args) {
MyDialog myDialog = new MobileDialog();
Button button = myDialog.createButton();
// MyDialog myDialog = new DesktopDialog();
// Button button = myDialog.createButton();
button.onClick();
}
}
//Button
public abstract class Button {
abstract void onClick();
}
//DesktopButton
public class DesktopButton extends Button {
@Override
public void onClick() {
System.out.println("PC 버튼 클릭!");
}
}
//MobileButton
public class MobileButton extends Button {
@Override
public void onClick() {
System.out.println("모바일 버튼 클릭!");
}
}
//MyDialog
public abstract class MyDialog {
abstract Button createButton();
}
//DesktopDialog
public class DesktopDialog extends MyDialog {
@Override
public Button createButton() {
return new DesktopButton();
}
}
//MobileDialog
public class MobileDialog extends MyDialog {
@Override
public Button createButton() {
return new MobileButton();
}
}