欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

基于php设计模式中工厂模式详细介绍

程序员文章站 2022-03-30 20:21:33
工厂模式:由工厂类根据参数来决定创建出哪一种产片类的实例工厂类:一个专门用来创建其他对象的方法类。即按需分配,传入参数进行选择,返回具体的类作用:对象创建的封装、简化创建对...

工厂模式:由工厂类根据参数来决定创建出哪一种产片类的实例
工厂类:一个专门用来创建其他对象的方法类。即按需分配,传入参数进行选择,返回具体的类
作用:对象创建的封装、简化创建对象的操作,即调用工厂类的一个方法来得到需要的类
补充:
1.主要角色
:抽象产品(product)、具体产品(concrete product)、抽象工厂角色(creator)
2.优缺点
    优点:工厂方法模式可以允许系统在不修改工厂角色的情况下引进心产品
    缺点:客户可能仅仅为了创建一个特定的concrete product对象,就不得不创建一个creator子类
3.适用性
    当一个类不知道它所必须创建的对象的时候
    当一个类希望由它的子类来制定它所创建的对象的时候
    当一个类将创建对象的职责委托给多个帮助子类的某一个,并且希望你将哪一个帮助子类是代理这一信息局部化的时候

复制代码 代码如下:

<?php
//对象
class myobject{
    public function __construct(){}
    public function test(){
        return 'test';
    }
}
//工厂
class myfactory{
    public static function factory(){
        return new myobject();
    }
}

$myobject = myfactory::factory();
echo $myobject->test();
?>
 

?<?php
//抽象类 定义属性及抽象方法
abstract class operation{
    protected $_numbera = 0;
    protected $_numberb = 0;
    protected $_result= 0;

    public function __construct($a,$b){
        $this->_numbera = $a;
        $this->_numberb = $b;
    }

    public function setnumber($a,$b){
        $this->_numbera = $a;
        $this->_numberb = $b;
    }

    public function clearresult(){
        $this->_result = 0;
    }

    abstract protected function getresult();
}

//操作类
class operationadd extends operation{
    public function getresult(){
        $this->_result = $this->_numbsera + $this->_numberb;
        return $this->_result;
    }
}

class operationsub extends operation{
    public function getresult(){
        $this->_result = $this->_numbera - $this->_numberb;
        return $this->_result;
    }
}
…………

//工厂类
class operationfactory{
    private static $obj;

    public static function creationoperation($type,$a,$b){
        switch($type){
            case '+':
                self::$obj = new operationadd($a,$b);
                break;
            case '-':
                self::$obj = new operationsub($a,$b);
                break;
            ……
        }
    }
}

//操作
$obj = operationfactory:: creationoperation('+',5,6);
echo $obj-> getresult();
?>