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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • android开发之滑动效果实现图片浏览_ViewFilpper的使用

    ViewFilpper 是Android官方提供的一个View容器类,继承于ViewAnimator类,用于实现页面切换,也可以设定时间间隔,让它自动播放。又ViewAnimator继承至于FrameLayout的,所以ViewFilpper的Layout里面可以放置多个View 本示例通过ViewFlipper和GestureDetector.OnGestureListener实现自

    2022年3月10日
    43
  • NOSQL(一)–Redis

    NOSQL(一)–Redis

    2021年11月26日
    37
  • 淘宝装修html代码大全_上古卷轴装修材料代码

    淘宝装修html代码大全_上古卷轴装修材料代码http://blog.sina.com.cn/s/blog_506f1f940100hv9d.html淘宝网店装修HTML代码大全,包括淘宝装修代码,插入图片代码,公告滚动代码,不不一定要懂网站知识,不一定要懂HTML语言,看完这个就可以装修网店的,你不一定要全部看完,可以当成是一个字典查找就好了。一、插入图片代码:注:先把图片上传到网络相册网络地址,把它拷贝下来,

    2025年7月22日
    2
  • python的缩进通常使用_python缩进格式

    python的缩进通常使用_python缩进格式Python中的缩进(Indentation)决定了代码的作用域范围。这一点和传统的c/c有很大的不同(传统的c/c使用花括号花括号{}符决定作用域的范围;python使用缩进空格来表示作用域的范围,相同缩进行的代码是处于同一范围)。每行代码中开头的空格数(whitespace)用于计算该行代码的缩进级别(Indentationlevel),注意一个Tab会被替换为1~8个Space(具…

    2022年10月10日
    1
  • vue.js 添加 fastclick的支持

    vue.js 添加 fastclick的支持fastclick:处理移动端click事件300毫秒延迟1、兼容性iOS3及更高版本的移动SafariiOS5及更高版本的ChromeAndroid上的Chrome(ICS)OperaMobile11.5及以上版本Android2以来的Android浏览器PlayBookOS1及以上版本2、不应用FastClick的场景桌面浏览器;如果视口元标签中设置了width=

    2022年6月19日
    23
  • MySQL 5.7root用户密码修改[通俗易懂]

    MySQL 5.7root用户密码修改[通俗易懂]在MySQL5.7password字段已从mysql.user表中删除,新的字段名是“authenticalion_string”.选择数据库:usemysql;更新root的密码:updateusersetauthentication_string=password(‘新密码’)whereuser=’root’andHost=’localhost’;刷新权限:fl…

    2022年6月25日
    34

发表回复

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

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