Notice
Recent Posts
Recent Comments
07-05 03:35
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

Byeol Lo

Factory 본문

BackEnd/Design Pattern

Factory

알 수 없는 사용자 2024. 6. 30. 00:15
객체 생성을 캡슐화하고, 클라이언트 코드로부터 객체의 생성 로직을 분리하자

 

 객체 생성을 직접 하지 않고, 객체 생성을 담당하고 관리하는 별도의 팩토리 클래스에게 이 일을 위임시켜서 생성 과정을 캡슐화해버린다. 이렇게 되면 생성 로직을 직접 다루지 않도록 하여, 객체 생성의 코드가 변경이나 확장에 유연하게 만들고, 단위 테스트하기에 유리하다. 단점으로는 복잡성이 증가하고, 코드가 분산되어 있어서 파악하기가 쉽지 않다.

// Door interface
public interface Door {
    void open();
    void close();
}

 

// WoodenDoor class
public class WoodenDoor implements Door {
    @Override
    public void open() {
        System.out.println("나무 도어가 열립니다.");
    }

    @Override
    public void close() {
        System.out.println("나무 도어가 닫힙니다.");
    }
}

// IronDoor class
public class IronDoor implements Door {
    @Override
    public void open() {
        System.out.println("철제 도어가 열립니다.");
    }

    @Override
    public void close() {
        System.out.println("철제 도어가 닫힙니다.");
    }
}

 

// DoorFactory class
public class DoorFactory {
	// Factory method
    public static Door makeDoor(String type) {
        switch (type) {
            case "wooden":
                return new WoodenDoor();
            case "iron":
                return new IronDoor();
            default:
                throw new IllegalArgumentException("해당하는 타입의 도어를 지원하지 않습니다.");
        }
    }
}

 

public class Main {
    public static void main(String[] args) {
        Door woodenDoor = DoorFactory.makeDoor("wooden");
        woodenDoor.open();
        woodenDoor.close();

        System.out.println();

        Door ironDoor = DoorFactory.makeDoor("iron");
        ironDoor.open();
        ironDoor.close();
    }
}

'BackEnd > Design Pattern' 카테고리의 다른 글

Singleton  (0) 2024.06.29
SOLID  (0) 2024.06.11
Comments