>  기사  >  백엔드 개발  >  PHP의 추상 팩토리 패턴에 대해 이야기해 보겠습니다.

PHP의 추상 팩토리 패턴에 대해 이야기해 보겠습니다.

青灯夜游
青灯夜游앞으로
2021-06-21 18:29:252710검색

이 기사에서는 PHP 디자인 패턴의 추상 팩토리 패턴을 이해하도록 안내합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

PHP의 추상 팩토리 패턴에 대해 이야기해 보겠습니다.

Factory Pattern 시리즈의 하이라이트는 바로 소문난 Abstract Factory Pattern입니다. 처음 이름을 들었을 때 어떤 느낌이 들었나요? 어쨌든, 나는 이것이 매우 고급적이어야 한다고 생각합니다. 결국 "추상"이라는 단어가 포함되어 있기 때문입니다. 이 두 단어는 정말 발전에 있어서 수준 높은 느낌을 가지고 있다고 하네요. 추상이라는 단어와 함께 사용하면 모든 것이 아주 강력한 것 같습니다. 그러나 Abstract Factory는 실제로 팩토리 패턴의 큰형이라고 할 수 있습니다.

Gof 클래스 다이어그램 및 설명

사실 팩토리 메소드 패턴만 이해하면 추상 팩토리 패턴도 이해하기 쉽습니다. 어떻게 말하나요? 여전히 하위 클래스로 지연되고 지정된 객체를 반환합니다. 추상 팩토리는 하나의 객체뿐만 아니라 여러 객체를 반환합니다.

GoF 정의: 특정 클래스를 지정하지 않고 일련의 관련되거나 상호 의존적인 개체를 생성하기 위한 인터페이스를 제공합니다.

GoF 클래스 다이어그램:

PHP의 추상 팩토리 패턴에 대해 이야기해 보겠습니다.

  • 왼쪽에는 두 개의 팩토리 1과 2가 있는데, 둘 다 추상 팩토리를 상속하고 CreateProductA 및 CreateProductB 메서드를 구현합니다.
  • Factory 1은 ProductA1 및 ProductB1을 생성합니다.
  • 마찬가지로, Factory 2는 ProductA2와 ProductB2를 생산합니다. A1과 B1의 관계는 유사한 관련 제품이고, B1과 B2는 유사한 관련 제품
  • // 商品A抽象接口
    interface AbstractProductA
    {
        public function show(): void;
    }
    
    // 商品A1实现
    class ProductA1 implements AbstractProductA
    {
        public function show(): void
        {
            echo 'ProductA1 is Show!' . PHP_EOL;
        }
    }
    // 商品A2实现
    class ProductA2 implements AbstractProductA
    {
        public function show(): void
        {
            echo 'ProductA2 is Show!' . PHP_EOL;
        }
    }
    
    // 商品B抽象接口
    interface AbstractProductB
    {
        public function show(): void;
    }
    // 商品B1实现
    class ProductB1 implements AbstractProductB
    {
        public function show(): void
        {
            echo 'ProductB1 is Show!' . PHP_EOL;
        }
    }
    // 商品B2实现
    class ProductB2 implements AbstractProductB
    {
        public function show(): void
        {
            echo 'ProductB2 is Show!' . PHP_EOL;
        }
    }
그리고 저희 공장도 1공장과 2공장이고, 1공장은 A1과 B1이라는 두 개의 관련 제품을 생산하고, 연결된 제품에 대해서는 2공장에서 2개의 관련 제품을 생산합니다. 제품, A2 및 B2. 좋습니다. 여기서는 아직 다소 추상적이라는 점을 알고 있으며, 이것이 왜 그런지 이해하지 못할 수도 있습니다. 계속해서 휴대폰 제작을 예로 들어보겠습니다.

저희 휴대폰 브랜드가 인기를 끌면서 휴대폰 필름, 휴대폰 케이스 등 주변기기 제품도 추상팩토리에 넘겨서 도와드리고 있습니다. 지난번 말씀드렸던 것처럼 이미 여러 종류의 휴대폰을 보유하고 있기 때문에 앞으로도 계속해서 헝양공장(Factory1)에서 휴대폰 모델 1001(ProductA1)을 생산하고 동시에 휴대폰 필름(ProductB1)을 생산하게 됩니다. 모델 1001 휴대폰 케이스(ProductB1)도 헝양공장에서 생산됩니다. 휴대폰 모델 1002(ProductA2)는 아직 정저우 공장(Factory2)에 있기 때문에 이 모델의 휴대폰 필름(ProductB2)과 휴대폰 필름(ProductC2)은 그들에게 맡겨야 한다. 그래서 저는 방금 주요 공장에 주문을 했습니다. 그들은 다른 공장에 저를 위해 완전한 휴대폰 제품 세트를 생산해 달라고 요청했고, 저는 그 세트를 직접 판매할 수 있었습니다! !

전체 코드: 추상 팩토리 패턴

https://github.com/zhangyue0503/designpatterns-php/blob/master/03.abstract-factory/source/abstract-factory.php

이 영상을 보고도 아직도 조금 어지러우신가요? 사실 간단히 말하면 팩토리 클래스의 다양한 메소드를 통해 다양한 객체를 반환하는 것뿐입니다. 다시 문자 메시지의 예를 들어 설명해 보겠습니다!

시나리오: 이번에는 문자 메시지뿐만 아니라 푸시 메시지도 동시에 보내야 하는 비즈니스 요구 사항이 있습니다. 문자 메시지의 목적은 참여할 새로운 활동이 있음을 사용자에게 알리는 것인데, 푸시 알림은 사용자에게 새로운 활동을 알릴 뿐만 아니라 직접 클릭하여 빨간 봉투를 받을 수도 있다는 점이 흥미롭지 않나요? 다행스럽게도 우리가 이전에 선택한 클라우드 서비스 제공업체는 모두 SMS와 푸시 인터페이스를 모두 갖추고 있으므로 추상 팩토리를 사용하여 구현하겠습니다!

SMS 전송 클래스 다이어그램

// 抽象工厂接口
interface AbstractFactory
{
    // 创建商品A
    public function CreateProductA(): AbstractProductA;
    // 创建商品B
    public function CreateProductB(): AbstractProductB;
}

// 工厂1,实现商品A1和商品B1
class ConcreteFactory1 implements AbstractFactory
{
    public function CreateProductA(): AbstractProductA
    {
        return new ProductA1();
    }
    public function CreateProductB(): AbstractProductB
    {
        return new ProductB1();
    }
}

// 工厂2,实现商品A2和商品B2
class ConcreteFactory2 implements AbstractFactory
{
    public function CreateProductA(): AbstractProductA
    {
        return new ProductA2();
    }
    public function CreateProductB(): AbstractProductB
    {
        return new ProductB2();
    }
}

전체 소스 코드: SMS 전송 팩토리 메소드

https://github.com/zhangyue0503/designpatterns-php/blob/master/03.abstract-factory/source / abstract-factory-message-push.php

PHP의 추상 팩토리 패턴에 대해 이야기해 보겠습니다.

Description

매우 명확합니까?

맞습니다. 하나는 메시지 전송용이고 다른 하나는 푸시 메시지 전송용인 푸시입니다. 추상 팩토리에서는 인터페이스 구현자가 문자 메시지 전송으로 돌아가는 두 가지 메소드만 구현하면 됩니다.

    푸시 알림은 보내지 않고 문자만 보내고 싶다고 하셨죠? 물론 가능합니다. 다만 createPush() 메서드를 호출하지 마세요.
  • 추상 팩토리는 어떤 시나리오에 가장 적합합니까? 분명히 일련의 관련 객체를 생성하는 것입니다
  • 팩토리 메소드 패턴은 추상 팩토리의 핵심입니다. 이는 여러 팩토리 메소드를 대형 공장에 투입하여 전체 제품 세트(주변 장치 포함)를 생산하는 것과 같습니다. 단일 제품
  • 추천 학습: "
  • PHP 비디오 튜토리얼
  • "

위 내용은 PHP의 추상 팩토리 패턴에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제