简单工厂模式实例与讲解

来源:互联网 发布:递四方 知乎 编辑:程序博客网 时间:2024/05/29 13:17

abstract class ApptEncoder{    abstract function encode();}class BloggsApptEncoder extends ApptEncoder{    function encode(){        return 'this is bloggs object';    }}class MegaApptEncoder extends ApptEncoder{    function encode(){        return 'this is mega object';    }}class CommsManager{    const BLOGGS = 1;    const MEAG = 2;    private $mode = 1;    function __construct($mode){        $this->mode;    }    function getAppEncoder(){        switch ($this->mode){            case (self::BLOGGS):                return new BloggsApptEncoder();            case (self::MEAG):                return new MegaApptEncoder();        }    }}$comms = new CommsManager(CommsManager::MEAG);$apptEncoder = $comms->getAppEncoder();print_r($apptEncoder->encode());    //输出:this is bloggs object

以上属于典型的简单工厂模式,可以适用于简单的运行模式,存在一定的缺陷,当我们需要在CommsManager中新增一个模式方法时,我们不得不再次进行模式的判断,CommsManager如下(我们新增了getHeaderText):

class CommsManager{    const BLOGGS = 1;    const MEAG = 2;    private $mode = 1;    function __construct($mode){        $this->mode;    }    function getAppEncoder(){        switch ($this->mode){            case (self::BLOGGS):                return new BloggsApptEncoder();            case (self::MEAG):                return new MegaApptEncoder();        }    }    function getHeaderText(){        switch ($this->mode){            case (self::BLOGGS):                return 'this is bloggs headerText';            case (self::MEAG):                return 'this is meag headerText';        }    }}
从上面我们可以看出,我们使用了重复的代码判断条件,我们可以对此进行简化和进一步的改进,也就是我们的工厂方法模式






0 0
原创粉丝点击