php简单工厂模式
2021/4/28 12:25:32
本文主要是介绍php简单工厂模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
简单工厂模式
工厂模式的意义:
在开发中,经常存在客户端和服务端分离开发的情况,也就是说服务端负责提供底层的一些借口,客户端这边直接调用,客户端不需要关心服务端是怎么实现的,也不需要看到服务端的代码(php是可以看到的,因为可以直接跟踪源码,而像java这边服务端是直接编译过的包,源码是无法看到的),鉴于此种情况,我们就引入了工厂模式
工厂模式图解
OperationFactory(工厂角色):工厂角色即工厂类,它是简单工厂模式的核心,负责实现创建所有产品实例的内部逻辑;工厂类可以被外界直接调用,创建所需的产品对象;在工厂类中提供了静态的工厂方法 createOperate(),它的返回类型为具体产品角色。
Operation(抽象产品角色):它是工厂类所创建的所有对象的父类,封装了各种产品对象的公有方法,它的引入将提高系统的灵活性,使得在工厂类中只需定义一个通用的工厂方法,因为所有创建的具体产品对象都是其子类对象。
OperateAdd、OperateSub、OperateMul、OperateDiv(具体产品角色):它是简单工厂模式的创建目标,所有被创建的对象都充当这个角色的某个具体类的实例。每一个具体产品角色都继承了抽象产品角色,需要实现在抽象产品中声明的抽象方法。
//抽象产品
abstract class Operation{
private $_a;
private $_b;
public function __set($name,$value){
$this->$name = $value;
}
public function __get($name){
return $this->$name;
}
abstract function getResult();
}
//具体产品(1)
class OperateAdd extends Operation{
public function getResult(){
return $this->_a + $this->_b;
}
}
//具体产品(2)
class OperateSub extends Operation{
public function getResult(){
return $this->_a - $this->_b;
}
}
//具体产品(3)
class OperateMul extends Operation{
public function getResult(){
return $this->_a * $this->_b;
}
}
//具体产品(4)
class OperateDiv extends Operation{
public function getResult(){
if($this->_b == 0){
throw new Exception('除数不能为0');
}
return $this->_a / $this->_b;
}
}
工厂角色
class OperationFactory{
public static function createOperate($operate){
switch ($operate){
case '+':
$oper = new OperateAdd();
break;
case '-':
$oper = new OperateSub();
break;
case '*':
$oper = new OperateMul();
break;
case '/':
$oper = new OperateDiv();
break;
}
return $oper;
}
}
//对于客户端来说 只需要开放工厂方法 和抽象类就可以实现功能
$oper = OperationFactory::createOperate('-');
$oper->_a = 1;
$oper->_b = 10;
$res = $oper->getResult();
var_dump($res);
这篇关于php简单工厂模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-19php8的协程和hyperf的协程有什么区别?-icode9专业技术文章分享
- 2024-12-19php8 的fiber是什么?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-11-29使用PHP 将ETH账户的资产汇集到一个账户
- 2024-11-23怎么实现安卓+php 热更新方案?-icode9专业技术文章分享
- 2024-11-22PHP 中怎么实现判断多个值是否为空、null 或者为 false?-icode9专业技术文章分享
- 2024-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享