1.场景
如果需要在mp3播放前将歌曲从云端同步下来,播放结束后将本地歌曲保存到云端。
2.解决办法
定义一个新的辅助类,并注入到mp3,在播放前和播放后调用辅助类中的相应方法。代码如下
package com.amber.ivy.spring;
/**
* 助理类,mp3同步助手
* @author ivyamber
*
*/
public class Assistant {
public static void main(String[] args) {
}
public void prepare()
{
System.out.println("同步云端歌曲列表到mp3");
}
public void save()
{
System.out.println("保存当前mp3内歌曲列表");
}
}
/**
* 助理类,mp3同步助手
* @author ivyamber
*
*/
public class Assistant {
public static void main(String[] args) {
}
public void prepare()
{
System.out.println("同步云端歌曲列表到mp3");
}
public void save()
{
System.out.println("保存当前mp3内歌曲列表");
}
}
package com.amber.ivy.spring;
/**
* 带有同步助手的mp3
* @author ivyamber
*
*/
public class Mp3WithoutAOP {
private Singer singer;//使用接口而不是用具体的实现
private Assistant assistant;
public Mp3WithoutAOP(Singer singer,Assistant assistant)
{
this.singer = singer;
this.assistant = assistant;
}
public void play()
{
assistant.prepare();
singer.sing();
assistant.save();
}
}
/**
* 带有同步助手的mp3
* @author ivyamber
*
*/
public class Mp3WithoutAOP {
private Singer singer;//使用接口而不是用具体的实现
private Assistant assistant;
public Mp3WithoutAOP(Singer singer,Assistant assistant)
{
this.singer = singer;
this.assistant = assistant;
}
public void play()
{
assistant.prepare();
singer.sing();
assistant.save();
}
}
package com.amber.ivy.spring;
public class NoneAOP {
public static void main(String[] args) {
Mp3WithoutAOP mp3 = new Mp3WithoutAOP(new NonePopMusicSinger(), new Assistant());
mp3.play();
}
}
public class NoneAOP {
public static void main(String[] args) {
Mp3WithoutAOP mp3 = new Mp3WithoutAOP(new NonePopMusicSinger(), new Assistant());
mp3.play();
}
}
输出结果:
同步云端歌曲列表到mp3
我是流行歌手,我唱流行音乐
保存当前mp3内歌曲列表
我是流行歌手,我唱流行音乐
保存当前mp3内歌曲列表
这样编写很容易理解。但是似乎不是每一个mp3使用者都希望mp3有这个功能,怎么办?