php 팩토리 메소드 패턴은 생성 패턴으로 흔히 사용되는 디자인 패턴 중 하나입니다. 팩토리 패턴도 단순 팩토리 패턴, 팩토리 메소드 패턴, 정적 팩토리 패턴, 추상 팩토리 패턴으로 나누어집니다. 단순한 공장 문제의 확장성.
소속: 일반적으로 사용되는 디자인 패턴 중 하나인 Creational 패턴
팩토리 패턴은 단순 팩토리 패턴, 팩토리 메소드 패턴, 정적 팩토리 패턴으로 구분됩니다. , 추상화 공장 모드.
다음은 팩토리 메소드 패턴입니다.
팩토리 방식은 단순 팩토리의 확장성 문제를 해결하는 것입니다. 누구나 심플 팩토리를 보면 단점을 발견하게 될 거라 믿습니다.
예전에는 단순 팩토리를 확장하려면 수정이 필요했습니다. 을 위반한 팩토리 내용 디자인 패턴은 외부 확장이 가능하고 닫힘 원리는 내부적으로 수정되어 팩토리 메소드 패턴을 만들었습니다.
관련 요소:
Factory 클래스(제품 A 인스턴스화)
공장 등급(제품 B 인스턴스화) )
제품 카테고리 A
쇼핑몰 웹사이트를 통해 Alipay, WeChat, 특정 은행, 특정 은행..., 결제 방법 등 다양한 결제 기능을 지원합니다. 프로그램을 디자인합니다.
해결된 문제:
1. 단순 팩토리 문제 해결[Open Closed]principle
흐름도는 다음과 같습니다
ule: 1. 테스트 입구 index.php
<?php namespace factory_method; include '../autoload.php'; // 张三支付 $param = []; $param['name'] = '张三'; $param['money'] = 100; $factory = new WeiXinFactory(); $mode = $factory->createMode(); // 使用工厂类获取产品类 $mode->doAction($param); // 执行产品类方法
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(); } }
<?php namespace factory_method;/** * 微信产品类转为工厂类 * Class WeiXinFactory * @package factory_method */class WeiXinFactory implements PayFactoryInterface { public function createMode() { return new WeiXin(); } }
<?php namespace factory_method;/** * 银联产品类转工厂类 * Class YinLianFactory * @package factory_method */class YinLianFactory implements PayFactoryInterface { public function createMode() { return new Yinlian(); } }
<?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(); }
<?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() { } }
<?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() { } }
<?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() { } }
GitHub 소스코드 주소: https://github.com/xiaobaoword/design_pattern/tree/master
위 내용은 PHP 팩토리 메소드 패턴이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!