>Java >java지도 시간 >팩토리 메소드 디자인 패턴 이해

팩토리 메소드 디자인 패턴 이해

王林
王林원래의
2024-07-23 17:37:20724검색

Understanding the Factory Method Design Pattern

팩토리 메소드 디자인 패턴 이해

문제

팩토리 메소드 패턴은 생성될 객체의 정확한 클래스를 지정하지 않고 객체를 생성해야 하는 필요성을 해결합니다. 이는 슈퍼클래스의 하위 클래스가 여러 개 있고 특정 조건이나 매개변수에 따라 특정 하위 클래스에 객체 생성을 위임하려는 경우에 유용합니다.

해결책

팩토리 메소드 패턴은 슈퍼클래스에서 객체를 생성하기 위한 인터페이스를 제공하지만 서브클래스가 생성될 객체의 유형을 변경할 수 있도록 허용합니다. 이는 클라이언트 코드가 구체적인 클래스가 아닌 팩토리 인터페이스와 직접 상호작용하도록 보장하여 느슨한 결합을 촉진합니다.

장점과 단점

장점

  • 클라이언트 코드 분리: 클라이언트 코드가 객체 생성을 위한 인터페이스 또는 추상 클래스와 함께 작동할 수 있도록 하여 유연성과 유지 관리 가능성을 높입니다.
  • 코드 재사용 촉진: 서브클래스는 팩토리 메소드에 정의된 것과 동일한 객체 생성 논리를 재사용할 수 있습니다.
  • 개방 폐쇄 원칙 지원: 개방 폐쇄 원칙을 준수하여 기존 클라이언트 코드를 수정하지 않고도 새 하위 클래스를 추가할 수 있습니다.

단점

  • 복잡성: 여러 하위 클래스와 팩토리 메서드를 도입하여 복잡성을 더 높였습니다.
  • 하위 클래스 필요: 각 제품 유형에는 자체 하위 클래스가 필요하므로 잠재적으로 코드베이스에서 클래스가 급증할 수 있습니다.
  • 간단한 경우에는 적합하지 않음: 간단한 시나리오에서 팩토리 메서드 패턴을 과도하게 사용하면 불필요한 추상화와 복잡성이 발생할 수 있습니다.

실제 적용 사례

팩토리 메소드 패턴의 실제 예는 문서 작성을 위한 프레임워크에 있습니다. 문서 유형(예: PDF, HTML)에 따라 해당 문서 팩토리에서 적절한 형식과 기능을 갖춘 문서 객체를 생성합니다.

Java의 예제 코드

코드의 팩토리 메소드 패턴

java
// Product interface
public interface Document {
    void open();
    void close();
}

// Concrete Product 1
public class PDFDocument implements Document {
    @Override
    public void open() {
        System.out.println("Opening PDF document");
    }

    @Override
    public void close() {
        System.out.println("Closing PDF document");
    }
}

// Concrete Product 2
public class HTMLDocument implements Document {
    @Override
    public void open() {
        System.out.println("Opening HTML document");
    }

    @Override
    public void close() {
        System.out.println("Closing HTML document");
    }
}

// Creator interface
public interface DocumentFactory {
    Document createDocument();
}

// Concrete Creator 1
public class PDFDocumentFactory implements DocumentFactory {
    @Override
    public Document createDocument() {
        return new PDFDocument();
    }
}

// Concrete Creator 2
public class HTMLDocumentFactory implements DocumentFactory {
    @Override
    public Document createDocument() {
        return new HTMLDocument();
    }
}

// Client code
public class Client {
    public static void main(String[] args) {
        DocumentFactory factory1 = new PDFDocumentFactory();
        Document pdfDocument = factory1.createDocument();
        pdfDocument.open();
        pdfDocument.close();

        DocumentFactory factory2 = new HTMLDocumentFactory();
        Document htmlDocument = factory2.createDocument();
        htmlDocument.open();
        htmlDocument.close();
    }
}

위 내용은 팩토리 메소드 디자인 패턴 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.