>백엔드 개발 >PHP 튜토리얼 >추상 팩토리 패턴 및 해당 PHP 구현

추상 팩토리 패턴 및 해당 PHP 구현

伊谢尔伦
伊谢尔伦원래의
2016-12-01 11:50:311413검색

추상 팩토리 패턴은 동일한 테마를 가진 별도의 팩토리 집합을 캡슐화하는 방법을 제공하는 생성 패턴입니다. 그 본질은 "이러한 개체의 특정 클래스를 지정하지 않고 일련의 관련되거나 독립적인 개체를 생성할 수 있는 인터페이스를 제공"하는 것입니다.

추상 팩토리 패턴은 구체적인 클래스를 지정하지 않고 시스템 관련 객체 또는 상호 의존 객체를 생성하기 위한 인터페이스를 제공합니다.

추상 팩토리 패턴의 주요 역할

추상 팩토리 역할: 추상적인 제품 개체를 생성하기 위한 인터페이스를 선언합니다

콘크리트 팩토리 역할: 제품 개체에 대한 생성 작업 구현

추상 제품 역할: 제품 유형의 인터페이스를 선언합니다.

구체적 제품 역할: 추상 제품 역할에 의해 정의된 인터페이스를 구현합니다.

이는 팩토리 메소드 모델과 유사합니다. 우리는 더 이상 버거 하나만을 원하지 않고, 버거 4개와 치킨 윙 2개를 원합니다. 우리는 여전히 웨이터가 특정 공장에 속해 있다고 말합니다. 추상적인 제품은 우리가 말하는 특정 제품입니다. 웨이터가 음식을 요청했습니다.

적용성

시스템이 제품과 독립적으로 생성, 조립 및 표현되는 경우.

시스템이 여러 제품군 중 하나로 구성되는 경우.

공동 사용을 위해 일련의 관련 제품 개체의 디자인을 강조해야 할 때.

제품 클래스 라이브러리를 제공하고 구현보다는 인터페이스만 표시하려고 합니다.

클래스 다이어그램

추상 팩토리 패턴 및 해당 PHP 구현

인스턴스

<?php
class Button{}
class Border{}
class MacButton extends Button{}
class WinButton extends Button{}
class MacBorder extends Border{}
class WinBorder extends Border{}
interface AbstractFactory {
    public function CreateButton();
    public function CreateBorder();
}
class MacFactory implements AbstractFactory{
    public function CreateButton(){ return new MacButton(); }
    public function CreateBorder(){ return new MacBorder(); }
}
class WinFactory implements AbstractFactory{
    public function CreateButton(){ return new WinButton(); }
    public function CreateBorder(){ return new WinBorder(); }
}
?>

이 예에서 팩토리 클래스는 일련의 팩토리 메소드를 구현합니다. 새 기능을 추가하려는 경우 새 인터페이스를 추가하고 기존 팩토리 클래스를 수정하지 않고 새 팩토리 클래스가 이 인터페이스를 구현하도록 할 수 있습니다.

장단점

장점

특정 클래스를 분리

제품군 추가 및 교체가 용이

제품에 좋음 일관성

단점

신제품 지원이 어렵다. 이는 AbstractFactory 인터페이스가 생성될 수 있는 제품 컬렉션을 결정하기 때문입니다. 새로운 유형의 제품을 지원하려면 팩토리 액세스 인터페이스를 확장해야 하며, 이로 인해 AbstractFactory 클래스와 모든 하위 클래스가 변경됩니다.


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