>백엔드 개발 >PHP 튜토리얼 >PHP 팩토리 메소드 패턴이란 무엇입니까?

PHP 팩토리 메소드 패턴이란 무엇입니까?

藏色散人
藏色散人원래의
2020-07-28 09:10:042698검색

php 팩토리 메소드 패턴은 생성 패턴으로 흔히 사용되는 디자인 패턴 중 하나입니다. 팩토리 패턴도 단순 팩토리 패턴, 팩토리 메소드 패턴, 정적 팩토리 패턴, 추상 팩토리 패턴으로 나누어집니다. 단순한 공장 문제의 확장성.

PHP 팩토리 메소드 패턴이란 무엇입니까?

추천: "PHP 튜토리얼"

소개

 소속: 일반적으로 사용되는 디자인 패턴 중 하나인 Creational 패턴

팩토리 패턴은 단순 팩토리 패턴, 팩토리 메소드 패턴, 정적 팩토리 패턴으로 구분됩니다. , 추상화 공장 모드.

 다음은 팩토리 메소드 패턴입니다.

패턴 개요

팩토리 방식은 단순 팩토리의 확장성 문제를 해결하는 것입니다. 누구나 심플 팩토리를 보면 단점을 발견하게 될 거라 믿습니다.

예전에는 단순 팩토리를 확장하려면 수정이 필요했습니다. 을 위반한 팩토리 내용 디자인 패턴은 외부 확장이 가능하고 닫힘 원리는 내부적으로 수정되어 팩토리 메소드 패턴을 만들었습니다.

 관련 요소:

  Factory 클래스(제품 A 인스턴스화)

  공장 등급(제품 B 인스턴스화) )
    제품 카테고리 A

                                                                    쇼핑몰 웹사이트를 통해 Alipay, WeChat, 특정 은행, 특정 은행..., 결제 방법 등 다양한 결제 기능을 지원합니다. 프로그램을 디자인합니다.

  간단한 팩토리 모델을 따르고 팩토리 클래스를 선언하고 팩토리 클래스에서 호출할 결제 방법을 결정하도록 하면 결제 방법이 추가될 때마다 팩토리 클래스에 대한 지속적인 수정 작업이 있어야 합니다. [개방성] Closed]원칙에 위배되는 클래스를 수정해야 합니다

 해결된 문제:

  1. 단순 팩토리 문제 해결[Open Closed]principle

  

흐름도는 다음과 같습니다

                           ule: 1. 테스트 입구 index.php

<?php
namespace factory_method;

include &#39;../autoload.php&#39;;

// 张三支付
$param = [];
$param[&#39;name&#39;] = &#39;张三&#39;;
$param[&#39;money&#39;] = 100;


$factory = new WeiXinFactory();
$mode = $factory->createMode(); // 使用工厂类获取产品类
$mode->doAction($param); // 执行产品类方法
2. 팩토리 클래스 인터페이스, 알리페이 결제 팩토리 클래스, 위챗 결제 팩토리 클래스, 유니온페이 결제 팩토리 클래스.

Factory 클래스 인터페이스: PayFactoryInterface.php

<?php

namespace factory_method;/**
 * 工厂类接口
 * Interface PayFactoryInterface
 * @package factory_method */interface PayFactoryInterface
{    public function createMode();
}

Alipay 결제 공장 클래스: ZhiFuBaoFactory.php

<?php
namespace factory_method;/**
 * 支付宝产品类转工厂类
 * Class ZhiFuBaoFactory
 * @package factory_method */class ZhiFuBaoFactory implements PayFactoryInterface
{    public function createMode()
    {        return new ZhiFuBao();
    }
}
WeChat 결제 공장 클래스: WeiXinFactory.php

<?php
namespace factory_method;/**
 * 微信产品类转为工厂类
 * Class WeiXinFactory
 * @package factory_method */class WeiXinFactory implements PayFactoryInterface
{    public function createMode()
    {        return new WeiXin();
    }
}
UnionPay 결제 공장 클래스: YinLianFactory.php

<?php
namespace factory_method;/**
 * 银联产品类转工厂类
 * Class YinLianFactory
 * @package factory_method */class YinLianFactory implements PayFactoryInterface
{    public function createMode()
    {        return new Yinlian();
    }
}
3. , Alipay 결제 상품 카테고리, WeChat 결제 상품 카테고리, UnionPay 결제 상품 카테고리.

제품 인터페이스: PayInterface.php

<?php
namespace factory_method;/**
 * Interface PayInterface
 * 定义支付Api规范接口 */interface PayInterface
{    /**
     * 发起扣款
     * @return mixed     */
    public function doAction($param);    /**
     * 记录日志
     * @return mixed     */
    public function payLog();    /**
     * 发送短信
     * @return mixed     */
    public function sendNews();
}
Alipay 결제 상품 카테고리: ZhiFuBao.php

<?php
namespace factory_method;// 银联class ZhiFuBao implements PayInterface
{    public function doAction($param)
    {        $name = $param['name'];        $money = $param['money'];        echo $name . '使用支付宝支付,支付金额' . $money;
    }    /**
     * 记录日志     */
    public function payLog()
    {

    }    /**
     * 发送消息     */
    public function sendNews()
    {

    }
}
WeChat 결제 상품 카테고리: WeiXin.php

<?php
namespace factory_method;// 银联class WeiXin implements PayInterface
{    public function doAction($param)
    {        $name = $param['name'];        $money = $param['money'];        echo $name . '使用微信支付,支付金额' . $money;
    }    /**
     * 记录日志     */
    public function payLog()
    {

    }    /**
     * 发送消息     */
    public function sendNews()
    {

    }
}
UnionPay 결제 상품 카테고리: Yinlian.php

<?php
namespace factory_method;// 银联class Yinlian implements PayInterface
{    public function doAction($param)
    {        $name = $param['name'];        $money = $param['money'];        echo $name . '使用银联支付,支付金额' . $money;
    }    /**
     * 记录日志     */
    public function payLog()
    {

    }    /**
     * 发送消息     */
    public function sendNews()
    {

    }
}
다음은 소스 코드입니다. address

 GitHub 소스코드 주소: https://github.com/xiaobaoword/design_pattern/tree/master

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

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