您的位置:首页 > 编程语言 > PHP开发

PHP设计模式-建造者模式(构建者模式)

2014-02-02 15:58 591 查看
       相信大家都听说过这么一个脑筋急转弯?把大象放进冰箱,要分几步?打开冰箱,把大象放进去,关上冰箱门。~~~哈哈。不错,就是宋丹丹小品里的一段。那么我们试着用程序实现一下?先建一个放大象的类,里面得有三个方法,开冰箱,放大象,关冰箱。So easy~

class PushElephant
{

public function openFridge()
{
echo "打开冰箱".PHP_EOL;
}

public function pushElephant()
{
echo "把大象放入冰箱".PHP_EOL;
}

public function closeFridge()
{
echo "关上冰箱".PHP_EOL;
}
}        那我们实现一个放大象的操作应该是这样的:
$pushAction = new PushElephant();
$pushAction->openFridge();
$pushAction->pushElephant();
$pushAction->closeFridge();       那么我每放一次,都要调用这三个方法。其实,每次的动作都是一样,没有什么改变。而且对于调用者来说很麻烦。如果步骤很多时候怎么办?或者说,如果有一个人,他不知道把大象放冰箱有哪几个步骤。那怎么办?好吧,那我们就帮他做好吧。简单地封装一下吧。于是把三个步骤放到一个步骤里:
class PushElephant
{

public function openFridge()
{
echo "打开冰箱".PHP_EOL;
}

public function pushElephant()
{
echo "把大象放入冰箱".PHP_EOL;
}

public function closeFridge()
{
echo "关上冰箱".PHP_EOL;
}

//把三个步骤放到一个步骤里
public function push()
{
$this->openFridge();
$this->pushElephant();
$this->closeFridge();
}
}        以后我要把大象放到冰箱里,就只需要push()一下就可以了。我们可以看出,其实我们只是把一些常规操作,进行了简单的封装。我们把这种封装叫做构建者模式,也叫建造者模式。好,这时候又有一个自以为是的人,它把顺序弄反了,例如,他先关上冰箱,再放大象,再打开冰箱。(当然现实中没有人这种人。但在其它的一些东西的构建过程中,步骤的顺序就不那么明显),这可怎么办?那我们就把这三个方法隐藏起来,即把public改为protected.另外,习惯上,我们对于protected方法名前都会加一个单下划线(只是用于区分访问权限,不是必须,关键还是看个人编码习惯)。
class PushElephant
{

protected function _openFridge()
{
echo "打开冰箱".PHP_EOL;
}

protected function _pushElephant()
{
echo "把大象放入冰箱".PHP_EOL;
}

protected function _closeFridge()
{
echo "关上冰箱".PHP_EOL;
}

//把三个步骤放到一个步骤里
public function push()
{
$this->_openFridge();
$this->_pushElephant();
$this->_closeFridge();
}
}
        这时,调用者就可以不用关心细节了。从上面例子我们也可以看出来,对于建造者模式来说,它的优点在于,可以把繁锁的操作封装在一起,并且可以使调用者无需关心构建的细节。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: