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


相关推荐

  • 织梦在服务器上面安装的时候一直提示data文件没有权限,可我已经写了权限,还是提示…

    织梦在服务器上面安装的时候一直提示data文件没有权限,可我已经写了权限,还是提示…

    2021年9月22日
    65
  • shopee和lazada受欢迎程度_马六甲东南亚电商erp

    shopee和lazada受欢迎程度_马六甲东南亚电商erp电商运营,各平台有各平台的特征,各地区有各地区的不同,没有什么一招鲜的方法可以通杀全平台,所以运营这个系列,我们一定要从分析不同站点的特征和操盘方式来开头。这一篇文章一定要有一个前提条件:旨在给刚入行和准备转战本土店的中小卖家一个简单的指南。可以在起步阶段有所参考。站点本身没有好坏之分,任何一个市场,都会有人做得风生水起。闲话少叙,我们先单提出来一个,台湾站。shopee和lazada站点全解析台湾站台湾站是Shopee的市场,Lazada没有。从跨境转向本土的同学,肯定是对该站点最熟悉了。因为中国台湾站是

    2025年11月24日
    5
  • 使用RadControls的RadMenu控件开发系统菜单

    使用RadControls的RadMenu控件开发系统菜单关于菜单这个话题我想应该是不讲则懂,所以本文不会多讲这些概念,则重关注RadControls控件中的RadMenu控件的使用,结合数据库来开发一个系统菜单。一、数据库设计这里我就使用Access作为示例数据库,详细见下图:表字段依次为:自动编号、菜单编码、菜单名称、请求地址、菜单上显示的图片地址、快捷键(RadMenu控件支持)、菜单顺序、菜单级限、是否为末级和父菜单编码。整个设计中…

    2022年7月24日
    5
  • JavaMD5[通俗易懂]

    JavaMD5[通俗易懂]publicclassCalPrivateKey{publicstaticvoidmain(String[]args) {StringappKey=”cee56d5722ea3afbef390e4dd1beda77″;StringappSecret=”010b02dd9b580f116c5352c5ecb7ca92″;St

    2022年7月14日
    23
  • NBNS扫描工具nbtscan-unixwiz

    NBNS扫描工具nbtscan-unixwizNBNS扫描工具nbtscan-unixwizNBNS是NetBIOSNameService的缩写,表示NetBIOS名称解析服务。NETBIOS是一种网络协议,用于实现消息通信和资源共享。利用该服务,可以基于NETBIOS协议获取计算机名称,从而进一步判断共享资源。KaliLinux提供了专用工具nbtscan-unixwiz。它可以直接扫描单个或者多个计算机名称或者IP地址,然后搜索…

    2022年10月21日
    4
  • 手撸 webpack4.x 配置(二)[通俗易懂]

    手撸 webpack4.x 配置(二)[通俗易懂]接着上一篇手撸webpack4.x配置(一)继续学习webpack配置。今天我学习配置下webpack中另一个模块plugins配置。之前我们都是手动在打包后(dist)目录里手动新建的index.html然后把打包后生成的JS文件手动的引入,今天我们来安装一个插件让webpack自动给我们生成模板!1官网配置地址:html-webpack-p…

    2022年8月22日
    5

发表回复

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

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