文章摘要
这篇文章介绍了如何通过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();
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();
© 版权声明
文章版权归作者所有,未经允许请勿转载。

