여러 객체로 구성된 복합 객체를 만들어야할 때, 포함된 객체가 모두 특별한 한 계통일 때 사용
DiagramFactory는 일반 텍스트를 만드는 클래스
SvgDiagramFactory는 그래픽적인 형태를 만드는 클래스

create_diagram은 다이어그램 팩토리를 인자로 받아 다이어그램을 생성한다.
→ 다이어그램 팩토리 인터페이스를 지원하는 한 어떤 종류의 다이어그램 팩토리여도 관계가 없다.
DiagramFactory와 SvgDiagramFactory의 구현

유일한 차이점은 반환되는 객체 타입이다.
→ Diagram의 객체 or SvgDiagram의 객체
기존의 문제점
해결 방안
Diagram, Rectangle, Text 클래스를 DiagramFactory 클래스의 Inner Class로 만든다.
각 메소드를 classmethod로 만든다.

classmethod를 만듦으로 인해 객체의 생성 없이 Diagram Instance를 반환할 수 있다.
단계별 생성을 필요로 한다.다양한 종류의 매개변수들로 User를 생성해야 하는 경우,
다음과 같이 생성자가 기하 급수적으로 늘어난다.

이럴 때에는, Builder 패턴을 활용하여 User 객체를 만드는 것이 훨씬 효율적이다.

Python 예제
각 폼을 생성한 다음 적절한 파일에 저장한다.

create_login_form()에 적절한 빌더 객체를 인자로 전달해 호출한다.

HtmlFormBuilder와 TkFormBuilder 모두 추상 기반 클래스인 AbstractFormBuilder를 상속한다.

abc.ABCMeta의 메타클래스를 전달하면 인스턴스를 만들 수 없기 때문에 추상 기반 클래스로만 사용해야 한다.
→ 실행 시 약간의 비용이 더 든다.
대다수의 파이썬 프로그래머는 문제가 될 수 있는 더 안일한 방법을 활용한다.
→ 메타클래스를 활용하지 않고, 해당 클래스를 추상 기반 클래스로 사용해야 한다고 문서화한다.
⇒ 아는 내용이므로 Pass
출처
https://www.baeldung.com/
'파이썬 인 프랙티스'
좋은 글 감사합니다.