ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php简单工厂模式

2021-04-28 10:55:07  阅读:231  来源: 互联网

标签:oper function return 模式 工厂 Operation php public


简单工厂模式

工厂模式的意义:

在开发中,经常存在客户端和服务端分离开发的情况,也就是说服务端负责提供底层的一些借口,客户端这边直接调用,客户端不需要关心服务端是怎么实现的,也不需要看到服务端的代码(php是可以看到的,因为可以直接跟踪源码,而像java这边服务端是直接编译过的包,源码是无法看到的),鉴于此种情况,我们就引入了工厂模式

php简单工厂模式 - セツコウ   - セツコウ  的博客

 

工厂模式图解 

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

标签:oper,function,return,模式,工厂,Operation,php,public
来源: https://blog.51cto.com/u_12953715/2738912

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有