php 工厂方法模式

php 工厂方法模式

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

<?php
    /**
     * 工厂方法模式,定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。
     * 
     * 包含的对象
     * 1,抽象产品
     * 2,具体产品
     * 3,抽象工厂
     * 4,具体工厂
     *
     * 将简单工厂模式的工厂类进行抽象化,避免扩展时需要修改简单工厂模式中的工厂类。方便扩展、维护。
     **/

    /**
     * 运算类
     **/
    abstract class Operation
    {
        abstract public function getValue($num1,$num2);
    }

    /**
     * 加法类
     **/
    class OperationPlus extends Operation
    {
        public function getValue($num1,$num2) {
            return $num1 + $num2;
        }
    }

    /**
     * 减法类
     **/
    class OperationSub extends Operation
    {
        public function getValue($num1,$num2) {
            return $num1 - $num2;
        }
    }

    /**
     * 乘法类
     **/
    class OperationMul extends Operation
    {
        public function getValue($num1,$num2) {
            return $num1 * $num2;
        }
    }

    /**
     * 除法类
     **/
    class OperationDiv extends Operation
    {
        public function getValue($num1,$num2) {
            try {
                if ( $num2 == 0 ) {
                    throw new Exception('除数不能为0!');
                } else {
                    return $num1/$num2;
                }
            } catch (Exception $e) {
                echo $e->getMessage();
            }
        }
    }

    /**
     * 抽象工厂类
     **/
    abstract class Factory
    {
        public abstract function getOperation();
    }

    /**
     * 加法工厂
     **/
    class FactoryPlus extends Factory
    {
        public function getOperation() {
            return new OperationPlus();
        }
    }

    /**
     * 加法工厂
     **/
    class FactorySub extends Factory
    {
        public function getOperation() {
            return new OperationSub();
        }
    }

    /**
     * 加法工厂
     **/
    class FactoryMul extends Factory
    {
        public function getOperation() {
            return new OperationMul();
        }
    }

    /**
     * 加法工厂
     **/
    class FactoryDiv extends Factory
    {
        public function getOperation() {
            return new OperationDiv();
        }
    }

    // 加法
    $factory = new FactoryPlus();
    $operation = $factory->getOperation();
    echo $operation->getValue(10,11);

    // 减法
    $factory = new FactorySub();
    $operation = $factory->getOperation();
    echo $operation->getValue(10,11);

    // 除法
    $factory = new FactoryDiv();
    $operation = $factory->getOperation();
    echo $operation->getValue(10,2);
?>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164362.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • arm架构的安卓模拟器_armv8.3

    arm架构的安卓模拟器_armv8.3Android设备的CPU类型通常称为ABIs问题描述解决方法1解决之前的截图2解决后的截图3解决方法4建议为什么你需要重点关注so文件App中可能出错的地方其他地方也可能出错使用android-21平台版本编译的so文件运行在android-15的设备上混合使用不同C运行时编译的so文件没有为每个支持的CPU架构提供对应的so文件将so文件放在错误的地方只提供arme…

    2026年1月27日
    2
  • vue中上传文件_vue上传文件前端完整实例

    vue中上传文件_vue上传文件前端完整实例input[type=“file”]上传文件原理详解https://blog.csdn.net/weixin_42193004/article/details/96275626结果:代码:<div><span>上传文件:</span><aclass=”upload”id=”up_btn”><inputtype=”file”

    2022年8月16日
    14
  • 【python】列出http://www.cnblogs.com/xiandedanteng中所有博文的标题

    代码:#列出http://www.cnblogs.com/xiandedanteng中所有博文的标题frombs4importBeautifulSoupimportrequestsuser_agent=’Mozilla/4.0(compatible;MEIE5.5;windowsNT)’headers={‘User-Agent’:user_agent}…

    2022年4月9日
    44
  • Springboot文件上传_maven上传jar包到远程仓库

    Springboot文件上传_maven上传jar包到远程仓库springboot文件上传机制:1.访问路径2. 上传完成后返回访问文件地址3. 我们只需要访问返回的地址就可以访问到图片4. yaml配置文件(localpath是实际存储的地址)5. 添加配置类,进行访问地址和存储地址映射 @Value(“${file.upload.suffixPath}”) private String uploadSuffixPath; @Value(“${file.upload.localPath}”) private Strin

    2022年8月8日
    5
  • ESET NOD32

    ESET NOD32ESET NOD32是由ESET发明设计的杀毒防毒软件。ESET,于1992年建立,是一个全球性的安全防范软件公司,主要为企业和个人消费者提供服务。其得奖之旗舰产品 NOD32 能针对已知及未知的病毒,间谍软件(SPYWARE)及其它对用户系统带来威胁的程式进行实时的保护。  For Home   ESETNOD32Antivirus11https://download….

    2022年6月22日
    47
  • 小米笔记本、小米游戏本重装原装出厂镜像教程-有百度盘的提取码

    小米笔记本、小米游戏本重装原装出厂镜像教程-有百度盘的提取码转:【新的干货儿】小米笔记本、小米游戏本重装原装出厂镜像教程原文转自:http://bbs.xiaomi.cn/t-36117135作者主页:http://bbs.xiaomi.cn/u-detail-426023643转载仅供学习,感谢原作者分享。【重装前须知】有百度盘的提取码1.本教程完全为个人观点,不代表官方,仅供参考。2.重装系统需谨慎,由此带来的任何问题与本人无…

    2022年6月27日
    300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号