php实现简单工厂模式

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

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

<?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();

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值