设计模式入门-模板方法模式(php版)
程序员文章站
2024-01-09 13:54:34
...
一个笑话说:把大象装进冰箱需要几个步骤?
LockElephant.php
模板方法设计模式的官方定义是:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类。模板方法可以使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
一、拉开冰箱
二、把大象塞进去
三、关上冰箱
同理,把狮子装进冰箱需要几个步骤?
一、拉开冰箱
二、把狮子塞进去
三、关上冰箱
上面这个例子中大家是否发现其实这两种方式有着共同的步骤,只是具体的实现稍有不同,简言之就是这两类行为可以共享一个步骤模板。由此可以引出这次要讨论的设计模式—模板设计模式。
模板设计模式的原理可以用如下所示的uml类图来表示:
具体的代码示例:
LockAnimal.php
open(); $this->push(); $this->close(); } /** * 打开冰箱 */ abstract function open(); /** * 将动物推进冰箱 */ abstract function push(); /** * 关上冰箱 */ abstract function close(); }LockElephant.php
"; } /** * (non-PHPdoc) * @see LockAnimal::push() */ public function push(){ echo "i'm pushing the elephantLockLion.php
"; } /** * (non-PHPdoc) * @see LockAnimal::close() */ public function close(){ echo "finally, now i can close the fridge
"; } }
"; } /** * (non-PHPdoc) * @see LockAnimal::push() */ public function push(){ echo "i'm pushing the lion
"; } /** * (non-PHPdoc) * @see LockAnimal::close() */ public function close(){ echo "finally, now i can close the fridge
"; } }
现在问题来了,挖掘机技术哪家强?开个玩笑啦。有些动物比较凶猛,不会乖乖的被推进冰箱,需要麻醉才行,我们需要为我们的程序加上一个钩子,以处理这种情况。修改后的代码如下:
LockAnimal.php
open(); if($this->needAnesthetic()){ $this->anesthetic(); } $this->push(); $this->close(); } /** * 打开冰箱 */ abstract function open(); /** * 是否需要麻醉 */ protected function needAnesthetic(){ return false; } protected function anesthetic(){ echo "anestheticing the animal"; } /** * 将动物推进冰箱 */ abstract function push(); /** * 关上冰箱 */ abstract function close(); }
LockElephant.php
"; } /** * (non-PHPdoc) * @see LockAnimal::push() */ public function push(){ echo "i'm pushing the elephantLockLion.php
"; } /** * (non-PHPdoc) * @see LockAnimal::close() */ public function close(){ echo "finally, now i can close the fridge
"; } }
"; } protected function needAnesthetic(){ return true; } protected function anesthetic(){ echo "anestheticing the lionindex.php
"; } /** * (non-PHPdoc) * @see LockAnimal::push() */ public function push(){ echo "i'm pushing the lion
"; } /** * (non-PHPdoc) * @see LockAnimal::close() */ public function close(){ echo "finally, now i can close the fridge
"; } }
lock(); $lion->lock();
模板方法设计模式的官方定义是:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类。模板方法可以使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
以上就介绍了设计模式入门-模板方法模式(php版),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。