Content

PHP设计模式之模板方法模式Template Method Pattern详解(php设计模式六大原则有哪些)全程干货

文章摘要

这篇文章介绍了如何通过Java编程实现一个下载功能的结构化设计。文章定义了一个抽象类`DownloadSongs`,该类包含两个钩子方法(`beforeDownloadHook`和`afterDownloadHook`),用于在下载前和下载后执行特定操作。此外,该类还定义了`download`方法,用于调用这两个钩子方法以及实际的音乐下载逻辑。 文章还展示了如何通过子类化的方式实现具体的下载功能。具体来说,`KuGouMusic`类实现了从酷狗音乐下载音乐的功能,而`QQMusic`类实现了从QQ音乐下载音乐的功能。每个子类都继承了父类的钩子方法,并在`downloadMusic`方法中定义了具体的下载逻辑。 文章最后通过实例化`KuGouMusic`和`QQMusic`类并调用`download`方法,展示了整个下载功能的使用场景。总体来看,文章通过钩子方法和子类化的方式,实现了对不同音乐平台下载功能的灵活扩展。

//抽象出来一个下载类 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();