有些时候,我们在不同的情况下我们对一件事会有不同的策略,比如说京东,我们都是知道京东在双十一或者在618都会做不同的活动。这时候我们就会用到我们的策略模式。
这里我们通过CD机和CD来举例子,大家都知道CD机是可以通过更换CD来播放不同的歌曲的,这就相当于不同的播放策略,但也有一部分CD机是通过内置的很多歌曲来解决这个问题的,比如说有些小孩子的故事机。显而易见的是,无论你内置再多的歌曲,也不可能把所有的歌曲全部罗列出来,这样的程序就不够灵活。下面我们来将这两种CD机进行对比,体会策略模式的优势。
/*
* 这里是老式CD机
*/
public class OldCDplayer {
public void playMusic(String singer){
if(singer == "jay"){
System.out.println("我是周杰伦我在演唱");
System.out.println("青花瓷");
System.out.println("双截棍");
System.out.println("七里香");
System.out.println("发如雪");
}else if(singer == "li"){
System.out.println("我是李荣浩我在演唱");
System.out.println("模特");
System.out.println("李白");
System.out.println("爸爸妈妈");
}else{
System.out.println("没有该歌手");
}
}
}
public class NewCDplayer {
private CD cd;
public void setCd(CD cd) {
this.cd = cd;
}
public void playMusic(){
cd.sing();
}
}
在新CD机中我们可以通过为CD机设置不同的CD来播放不同的歌曲,这就是策略模式,将策略声明在外部,并持有策略的接口对象,在不同的请情况下为其灵活的设置不同的策略;