注册
|
登录
发帖
热搜
活动
交友
discuz
论坛
BBS
翼度工具
翼度网址导航
开发工具
Linux命令速查
网页设计配色表
在线制作icon
颜色代码选取器
翼度科技
»
论坛
›
编程开发
›
PHP
›
查看内容
返回列表
发新帖
浅谈PHP设计模式的模板方法模式
棉花糖的小若若
棉花糖的小若若
当前离线
积分
27
9
主题
9
帖子
27
积分
新手上路
新手上路, 积分 27, 距离下一级还需 23 积分
新手上路, 积分 27, 距离下一级还需 23 积分
积分
27
发消息
显示全部楼层
简介:
模板方法模式,是行为型的设计模式。
定义一个操作中的算法的骨架,而将一些步骤延迟到子类当中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
通俗讲,模板方法模式是偏向继承的设计模式,当子类有重复的动作时候,可将他们提取出来,放在父类进行处理。
适用场景:
算法结构相同但是算法不同的场景下使用,父类控制整体,子类具体实现。
优点:
体现了继承的优点,实例化子类,子类继承的是父类的模板方法,可以实现统一格式的算法调用,并避免重复。
方便实现钩子函数。
用户只需要实现子类的部分逻辑,实例化父类就可以完成功能。
符合开闭原则。
方便扩展。
缺点:
受到父类约束,继承让耦合度变大,某些场景下会有局限性。
其它:
相比较与策略模式相似。
但是模板方法的定位是父类控制整体,子类具体实现。为了优雅的扩展代码而生。
策略模式的定位是根据情况选定合适的算法。
代码
//抽象出来一个下载类
abstract class DownloadSongs {
protected $singer;
protected $operator;
public function __construct($singer) {
$this->singer = $singer;
}
//前置钩子
protected function beforeDownloadHook() {
echo '充值' . $this->operator . '会员' . PHP_EOL;
}
//后置钩子
protected function afterDownloadHook() {
echo $this->operator . '还算好用,就是要充会员' . PHP_EOL;
}
//组合调用
public function download() {
$this->beforeDownloadHook();
$this->downloadMusic();
$this->afterDownloadHook();
}
//具体实现让子类进行
abstract protected function downloadMusic();
}
//酷狗类,实现父类的两个方法
class KuGouMusic extends DownloadSongs {
protected $operator = '酷狗';
protected function downloadMusic() {
echo '从酷狗音乐上下载' . $this->singer . '的歌曲' . PHP_EOL;
}
}
//QQ类,实现父类的两个方法
class QQMusic extends DownloadSongs {
protected $operator = 'QQ';
protected function downloadMusic() {
echo '从QQ音乐上下载' . $this->singer . '的歌曲' . PHP_EOL;
}
}
//调用端=======================================================================
(new KuGouMusic('凤凰传奇'))->download();
(new QQMusic('英文'))->download();
复制代码
来源:
https://www.cnblogs.com/phpphp/p/16878748.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
上一篇: 没有了
下一篇:
早安微信公众号消息推送最新版(国外城市、国内每日新闻)
发表于 2023-1-2 16:05:38
举报
回复
使用道具
分享
返回列表
发新帖
本版积分规则
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
快速回复
快速回复
返回顶部
返回顶部
返回列表
返回列表