php工厂方法模式是什么

php工厂方法模式是什么

推荐:《PHP教程》

引言

所属:创建型模式,常用设计模式之一

工厂模式分为:简单工厂模式、工厂方法模式、静态工厂模式、抽象工厂模式。

下面为工厂方法模式。

模式概述

工厂方法就是为了解决简单工厂扩展性的问题,相信大家再看简单工厂是也发现了其缺陷,

以前简单工厂要扩展的时候,需要修改工厂内容,这就违背了设计模式对外扩展开放,对内修改关闭原则,所以搞了个工厂方法模式,这是我的理解, 

涉及元素:

工厂类(实例化产品A)

工厂类(实例化产品B)
产品类A

产品类B

举个栗子

一个商城网站,支持多种支付功能,例如:支付宝、微信、某银行、某银行……,程序如何设计。

如果按照简单工厂模式的话,声明一个工厂类,由工厂类判断调用哪种支付方式,那么必然存在工厂类不断修改的操作,每增加一个支付方式都要去修改工厂类,违背了【开放封闭】原则

解决的问题:

1. 解决简单工厂【开放封闭】原则问题

流程图如下:

php工厂方法模式是什么

程序设计代码:

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); // 执行产品类方法

2. 工厂类接口,支付宝支付工厂类,微信支付工厂类,银联支付工厂类。

工厂类接口:PayFactoryInterface.php

<?php

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

支付宝支付工厂类:ZhiFuBaoFactory.php

<?php
namespace factory_method;/**
 * 支付宝产品类转工厂类
 * Class ZhiFuBaoFactory
 * @package factory_method */class ZhiFuBaoFactory implements PayFactoryInterface
{    public function createMode()
    {        return new ZhiFuBao();
    }
}

微信支付工厂类:WeiXinFactory.php

<?php
namespace factory_method;/**
 * 微信产品类转为工厂类
 * Class WeiXinFactory
 * @package factory_method */class WeiXinFactory implements PayFactoryInterface
{    public function createMode()
    {        return new WeiXin();
    }
}

银联支付工厂类:YinLianFactory.php

<?php
namespace factory_method;/**
 * 银联产品类转工厂类
 * Class YinLianFactory
 * @package factory_method */class YinLianFactory implements PayFactoryInterface
{    public function createMode()
    {        return new Yinlian();
    }
}

3. 产品类接口,支付宝支付产品类,微信支付产品类,银联支付产品类。

产品类接口: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();
}

支付宝支付产品类: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()
    {

    }
}

微信支付产品类: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()
    {

    }
}

银联支付产品类: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()
    {

    }
}

以下为源码地址

GitHub源码地址:https://github.com/xiaobaoword/design_pattern/tree/master

关于php工厂方法模式是什么的文章就分享到这,如果对你有帮助欢迎继续关注我们哦

本文来自投稿,不代表科技代码立场,如若转载,请注明出处https://www.cwhello.com/40396.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
上一篇 2022年6月12日 22:56
下一篇 2022年6月12日 22:56

相关推荐

  • 实例讲解php提交表单关闭layer弹窗iframe

    介绍一款非常好用的前端弹窗插件:layer 官网地址:http://layer.layui.com/根据官方的API:layer的iframe弹窗//iframe层-父子操作 layer.open({ type: 2, area: ['700px', '530px'], fix: f...

    2022年6月17日
    0158
  • 看看PHP 多进程处理任务

    pcntl 模块(非 Unix 类系统不支持此模块)一个 PHP 多进程简单例子大概是这个样子:// 5 个子进程处理任务for ($i = 0; $i < 5; $i++) { $pid = pcntl_fork(); if ($pid == -1) { die("could not fork&q...

    2022年6月20日
    0128
  • PHP函数的Slim函数。

    PHP是一门非常流行的服务器端脚本语言,在Web开发领域有着广泛的应用。其中,Slim框架是PHP中一个轻量级、灵活、易于学习和使用的开源框架,提供了构建web应用程序所需的基本功能和组件,并且可扩展性强,适用于...

    2023年5月23日
    00
  • php自学教程—php运算符的错误抑制符

    错误抑制符 说明:@,目的屏蔽一些不重要错误。 作用:所有的网站不可能没有bug的时候上线。 执行运算符 说明:``,把数据用反引号括起来后,就是执行了。 递增递减运算符 说明:自己加一或自己减一,符号:++ --...

    2017年12月6日 PHP自学教程
    0232
  • PHP8.0中的反射API库:Reflection

    PHP8.0 是一个重要的更新版本,其中最受欢迎的特性之一是改进的反射 API 系统。反射 API 在框架和库中广泛使用,可以动态读取和修改类、方法、属性和参数的定义。在本文中,我们将介绍 PHP8.0 中的反射 API 库——R...

    2023年5月18日
    03
  • PHP入门指南:PHP和XML。

    PHP是一种流行的Web编程语言,已经被广泛应用于互联网和企业应用。PHP可以动态生成Web页面,提供功能强大的数据处理和交互。而XML是一种可扩展的标记语言,可以用来描绘复杂的数据结构和关系,是数据交换和存储的...

    2023年5月30日
    00
  • 掌握php短信接口代码

    本文实例为大家分享了几个常用的php短信接口代码,供大家参考,具体内容如下1. 短信调用class <?php /** * User: Administrator * Date: 2016/5/8 0008 * Time: 下午 2:36 */ class Sms{ //Luosimao api key p...

    2022年6月17日
    0138
  • PHP基于数组实现的堆栈和队列功能示例(附代码)

    堆栈和队列是数据结构的两种实现形式,是使用非常广泛的存储数据的容器。下面呢,就分别讲下这两种容器在PHP中的应用: 使用数组实现堆栈: 1、堆栈容器中,最后进栈的将会被最先出栈,即所谓的“先进后出”的数据...

    2018年3月2日
    0210

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息