时间:2021-07-01 10:21:17 帮助过:24人阅读
一、拉开冰箱
二、把大象塞进去
三、关上冰箱
同理,把狮子装进冰箱需要几个步骤?
一、拉开冰箱
二、把狮子塞进去
三、关上冰箱
上面这个例子中大家是否发现其实这两种方式有着共同的步骤,只是具体的实现稍有不同,简言之就是这两类行为可以共享一个步骤模板。由此可以引出这次要讨论的设计模式—模板设计模式。
模板设计模式的原理可以用如下所示的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 elephant
";
}
/**
* (non-PHPdoc)
* @see LockAnimal::close()
*/
public function close(){
echo "finally, now i can close the fridge
";
}
}LockLion.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
";
}
}现在问题来了,挖掘机技术哪家强?开个玩笑啦。有些动物比较凶猛,不会乖乖的被推进冰箱,需要麻醉才行,我们需要为我们的程序加上一个钩子,以处理这种情况。修改后的代码如下:
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();
}";
}
/**
* (non-PHPdoc)
* @see LockAnimal::push()
*/
public function push(){
echo "i'm pushing the elephant
";
}
/**
* (non-PHPdoc)
* @see LockAnimal::close()
*/
public function close(){
echo "finally, now i can close the fridge
";
}
}LockLion.php
";
}
protected function needAnesthetic(){
return true;
}
protected function anesthetic(){
echo "anestheticing the lion
";
}
/**
* (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
";
}
}index.phplock(); $lion->lock();
以上就介绍了设计模式入门-模板方法模式(php版),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。