首页后端开发PHPphp工厂方法模式是什么

php工厂方法模式是什么

时间2024-02-02 08:36:03发布访客分类PHP浏览988
导读:收集整理的这篇文章主要介绍了php工厂方法模式是什么,觉得挺不错的,现在分享给大家,也给大家做个参考。php工厂方法模式属于创建型模式,是常用设计模式之一,并且工厂模式还分为简单工厂模式、工厂方法模式、静态工厂模式以及抽象工厂模式,而工厂方...
收集整理的这篇文章主要介绍了php工厂方法模式是什么,觉得挺不错的,现在分享给大家,也给大家做个参考。

php工厂方法模式属于创建型模式,是常用设计模式之一,并且工厂模式还分为简单工厂模式、工厂方法模式、静态工厂模式以及抽象工厂模式,而工厂方法就是为了解决简单工厂扩展性的问题。

推荐:《PHP教程》

引言

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

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

  下面为工厂方法模式。

模式概述

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

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

  涉及元素:

    工厂类(实例化产品A)

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

    产品类B

举个栗子

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

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

    解决的问题:

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

    流程图如下:

          

程序设计代码:

1. 测试入口index.php

?phpnamespace factory_method;
    include '../autoload.php';
    // 张三支付$param = [];
    $param['name'] = '张三';
    $param['money'] = 100;
    $factory = new WeiXinFactory();
    $mode = $factory->
    createMode();
     // 使用工厂类获取产品类$mode->
    doAction($param);
     // 执行产品类方法

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

工厂类接口:PayFactoryInterface.php

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

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

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

微信支付工厂类:WeiXinFactory.php

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

银联支付工厂类:YinLianFactory.php

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

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

产品类接口:PayInterface.php

?phpnamespace 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

?phpnamespace 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

?phpnamespace 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

?phpnamespace 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工厂方法模式是什么的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: php工厂方法模式是什么
本文地址: https://pptw.com/jishu/596608.html
php session不过期的实现方法 php如何发布扩展信息

游客 回复需填写必要信息