大家好,又见面了,我是你们的朋友全栈君。
通过简单工厂模式的开发,能够较大程度的降低代码间的耦合度,提高代码的可扩展性。下面是做了一个四则运算计算器的简单工厂模式。
先写一个工厂类,加、减、乘、除。。。。这些运算均可在工厂类里去生产。
<?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.cn/164371.html原文链接:https://javaforall.cn