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

来源:互联网 发布:js array item 编辑:程序博客网 时间:2024/06/07 19:52

        相信大家都听说过这么一个脑筋急转弯?把大象放进冰箱,要分几步?打开冰箱,把大象放进去,关上冰箱门。~~~哈哈。不错,就是宋丹丹小品里的一段。那么我们试着用程序实现一下?先建一个放大象的类,里面得有三个方法,开冰箱,放大象,关冰箱。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();}}
        这时,调用者就可以不用关心细节了。从上面例子我们也可以看出来,对于建造者模式来说,它的优点在于,可以把繁锁的操作封装在一起,并且可以使调用者无需关心构建的细节。

原创粉丝点击