php实现简单工厂模式「建议收藏」

php实现简单工厂模式「建议收藏」通过简单工厂模式的开发,能够较大程度的降低代码间的耦合度,提高代码的可扩展性。下面是做了一个四则运算计算器的简单工厂模式。先写一个工厂类,加、减、乘、除。。。。这些运算均可在工厂类里去生产。<?php require’./Calculate.class.php’; classOperationFactory { publicstaticfunctioncreat…

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

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

通过简单工厂模式的开发,能够较大程度的降低代码间的耦合度,提高代码的可扩展性。下面是做了一个四则运算计算器的简单工厂模式。

先写一个工厂类,加、减、乘、除。。。。这些运算均可在工厂类里去生产。

<?php
	require './Calculate.class.php';
	class OperationFactory
	{
		public static function createOper(string $operation)
		{
			$ope = null;
			switch($operation) {
				case '+':
					$ope = new Add();
					break;
				case '-':
					$ope = new Sub();
					break;	
				case '*':
					$ope = new Mul();
					break;
				case '/':
					$ope = new Div();
					break;		
			}
			return $ope;
		}
	}

正常每一个运算应该单独写一个类,在工厂类里相应的引入运算类文件,这里我做的比较简单,直接写了一个calculate类来放。

<?php
	require "./Operation.class.php";
	class Add extends Operation
	{
		public function getResult()
		{
			return $this->numA + $this->numB;
		}
	}

	class Sub extends Operation
	{
		public function getResult()
		{
			return $this->numA - $this->numB;
		}
	}

	class Mul extends Operation
	{
		public function getResult()
		{
			return $this->numA * $this->numB;
		}
	}

	class Div extends Operation
	{
		public function getResult()
		{
			return $this->numA / $this->numB;
		}
	}

在这里将运算类抽象成一个类。其他具体的运算类均去继承他。这样代码的封装性更好。

<?php
	abstract class Operation
	{
		private $numA;

		private $numB;

		public function __set($property, $value)
		{
			if (property_exists($this, $property)) {
				$this->$property = $value; 
				
			}
		}

		public function __get($property)
		{
			if (property_exists($this, $property)) {
				return $this->$property;
			}	

		}

		abstract function getResult();
		
	}

最后我们在客户端调用就可以了

<?php

	require_once"./OperationFactory.class.php";
	$ope = OperationFactory::createOper("+");

	$ope->numA = 12;

	$ope->numB = 23;

	echo $ope->getResult();

这样就将客户端,工厂,运算类,运算符类的耦合度降低了很多,当需要增加其他运算的时候,只需要在工厂类里增加相应的生产线,然后去扩展一个运算,客户端直接调用就可以了。

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

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

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


相关推荐

  • 鲸鱼优化算法与其他算法对比_鲸鱼优化算法百度百科

    鲸鱼优化算法与其他算法对比_鲸鱼优化算法百度百科文章目录一、理论基础1、鲸鱼优化算法2、鲸鱼优化算法的改进(1)自适应调整权重(2)自适应调整搜索策略(3)AWOA流程图二、仿真对比与分析三、参考文献四、Matlab仿真程序一、理论基础1、鲸鱼优化算法请参考这里。2、鲸鱼优化算法的改进(1)自适应调整权重由于WOA在优化求解的过程中,线性的惯性权重调整策略若选择不合适,将影响算法的收敛速度。因此,本文提出了一种根据当前鲸鱼种群分布情况来自适应改变权值的大小,公式如下:w=d1⋅(Piworst−Pibest)+d2⋅(xiupper−xilo

    2022年10月5日
    3
  • pipenv是什么_pipenv安装失败

    pipenv是什么_pipenv安装失败pipenv发布于2017年1月,它是一种Python依赖管理工具,你可以把它看做是pip和virtualenv的组合体,pipenv可以帮你管理虚拟环境和依赖文件,并且提供一系列命令和选项来帮助你实

    2022年8月6日
    10
  • 智能小车设计规划_智能循迹避障小车设计

    智能小车设计规划_智能循迹避障小车设计摘要该课题主要基于单片机的循迹、避障、WiFi、蓝牙等功能的智能小车,在一些特殊环境下有着特殊的意义。硬件控制以arduino为控制核心。采用超声波避障和红外避障传感器共同完成寻迹、避障功能,并将相关信号传送给单片机,经单片机控制系统分析判断后控制驱动芯片驱动直流电机实现小车前进、后退、左转、右转,停止。软件采用移植性较好的c语言编写,通过手机蓝牙App实现对智能小车的控制。通过TCP/UD协…

    2022年10月18日
    2
  • ASP.NET_氚云开发

    ASP.NET_氚云开发氚云平台对接中间件WebService(修订版20200714)1.代码示例C#语言进行编写,运行在.NetFramework4.5环境2.使用VS2015以及以上版本打开.sln解决方案3.第三方WebService结构必须按照氚云规定的格式,方法和参数都不可变动,否则氚云平台无法调用4.所有数据传输均使用标准的Json格式数据5.第三方WebService必须发布至公网,氚云平台才可正常配置地址注意:此示例代码只是演示接口基础调用,没有做安全方面防范措施!!!不可直接使用项目结构:1

    2025年8月12日
    2
  • pycharm如何同时选中多个相同内容_jsonobject.parsearray

    pycharm如何同时选中多个相同内容_jsonobject.parsearrayPycharm使用技巧:ShowasJSON(以友好的方式显示输出框的json字符串)

    2022年8月26日
    11
  • layui弹出层html页面,layui弹出层

    layui弹出层html页面,layui弹出层利用layui框架layer部分执行的弹出层,这样比起普通alert的弹出层更美观首先,写一个按钮点击试试js部分$(document).ready(function(){$(‘.btn’).on(‘click’,function(){layer.confirm(‘你好吗?’,{btn:[‘好’,’不好’]},function(){layer.msg(‘hao’,{ico…

    2022年6月14日
    49

发表回复

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

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