模板方法模式:
  定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

角色:
  抽象模板角色:抽象模板类,定义了一个具体的算法流程和一些留给子类必须实现的抽象方法。
  具体子类角色:实现抽象模板类中的抽象方法,子类可以有自己独特的实现形式,但是执行流程受抽象模板类控制。

UML图:

   

适用性:
  1、完成某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时。我们通常考虑用模板模式来处理。
  2、当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现,我们通过模板模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。
  3、模板模式通过把不变的行为搬移到超级抽象类,去除子类中的重复代码来体现它的优势。模板模式提供了一个很好的代码复用平台。

代码实现:

<?php
//抽象模板类:
abstract class makeComputer{
private $type;
function __construct($type){
$this->type = $type;
}
function procedure(){
$this->prepareScreen();
$this->prepareMainboard();
$this->prepareCPU();
$this->prepareMemoryBank();
}
abstract function prepareScreen();
abstract function prepareMainboard();
abstract function prepareCPU();
abstract function prepareMemoryBank();
} class makeLenovoComputer extends makeComputer{
function __construct($type='联想') {
parent::__construct($type);
}
function prepareScreen(){
echo "联想屏幕准备完毕";
}
function prepareMainboard(){
echo "联想主板准备完毕";
}
function prepareCPU(){
echo "联想CPU准备完毕";
}
function prepareMemoryBank(){
echo "联想内存条准备完毕";
}
} class makeAsusComputer extends makeComputer{
function __construct($type='华硕') {
parent::__construct($type);
}
function prepareScreen(){
echo "华硕屏幕准备完毕";
}
function prepareMainboard(){
echo "华硕主板准备完毕";
}
function prepareCPU(){
echo "华硕CPU准备完毕";
}
function prepareMemoryBank(){
echo "华硕内存条准备完毕";
}
} //测试
$lenovoComputer = new makeLenovoComputer();
$lenovoComputer->procedure();
?>

最新文章

  1. 使用国内pypi源来安装python包
  2. .NET平台开发Mongo基础知识
  3. Oracle数据库,内置函数小结
  4. LInux下修改 ~/.bashrc 文件source ~/.bashrc 后 shell 命令 失效 任何命令都显示 “ bash XX :未找到命令”
  5. TCP UDP 协议的区别和联系
  6. 帝国CMS列表模板页面内容截取
  7. KNN算法与Kd树
  8. 正斜杠和反斜杠-windows、web、c语言大讨论
  9. UIView添加事件
  10. java细节,细的你想象不到
  11. github使用介绍
  12. Salesforce删除数据时出现Insufficient privileges的可能原因
  13. maven - 引用本地jar,进行jar包移动
  14. YUI Compressor
  15. windows下安装Python虚拟环境virtualenvwrapper-win
  16. sublime 配置过程
  17. Jenkins获取运行job的用户名
  18. 老男孩python学习自修第十三天【md5加密】
  19. hive有关函数
  20. Atcoder 1973:こだわり者いろはちゃん / Iroha's Obsession

热门文章

  1. bzoj4406: [Wc2016]论战捆竹竿&amp;&amp;uoj#172. 【WC2016】论战捆竹竿
  2. hdu2544 迪杰斯特拉题目优化
  3. 书写优雅的shell脚本(一)- if语句
  4. 理解 Android MVP 开发模式
  5. CoderForces343D:Water Tree(dfs序+线段树&amp;&amp;特殊处理)
  6. Objective-C Runtime(二)消息传递机制
  7. GYM 100741A Queries
  8. javascript 布尔类型
  9. bzoj1996
  10. docker使用问题