您的位置:首页 > 其它

简单工厂模式实例与讲解

2015-11-14 17:35 393 查看
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';
}
}
}

从上面我们可以看出,我们使用了重复的代码判断条件,我们可以对此进行简化和进一步的改进,也就是我们的工厂方法模式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: