JAVA策略模式例子

来源:互联网 发布:知乎 朱炫 西游记 编辑:程序博客网 时间:2024/06/05 14:41

/** *  * ClassName: 华语经典 <br/>  * Function: TODO ADD FUNCTION. <br/>  * Reason: TODO ADD REASON(可选). <br/>  * @version */public class ChineseClassics extends NeteaseCloudMusicSongSheet {@Overridepublic String getS_code() {return "WYYHYJD_GD_7231";}@Overridepublic String getS_name() {return "华语经典 ";}@Overridepublic String getS_cdate() {return "2017-03-01";}@Overridepublic String getS_songRows() {return "16首";}@Overridepublic String getS_face() {return "images\001";}}


一个音乐播放器有很多歌单,我们点击一个歌单就会进入开始循环列表播放里面的歌曲

使用策略模式播放歌单,让用户来回切换:

以上的子类(华语经典)继承下面这个抽象父类

     

import java.util.List;/** *  * ClassName: 网易云音乐歌单 <br/>  * Function: TODO ADD FUNCTION. <br/>  * Reason: TODO ADD REASON(可选). <br/>  * @version */public abstract class NeteaseCloudMusicSongSheet {private String s_code;//歌单编号private String s_name;//歌单名private  String s_cdate;//歌单创建时间private String s_songRows;//收录歌曲数量private String s_face;//封面public String getS_code() {return s_code;}public void setS_code(String s_code) {this.s_code = s_code;}public String getS_name() {return s_name;}public void setS_name(String s_name) {this.s_name = s_name;}public String getS_cdate() {return s_cdate;}public void setS_cdate(String s_cdate) {this.s_cdate = s_cdate;}public String getS_songRows() {return s_songRows;}public void setS_songRows(String s_songRows) {this.s_songRows = s_songRows;}public String getS_face() {return s_face;}public void setS_face(String s_face) {this.s_face = s_face;}}

再添加一个歌单


/** *  * ClassName: 歌单-影视原声 <br/>  * Function: TODO ADD FUNCTION. <br/>  * Reason: TODO ADD REASON(可选). <br/>  * @version */public class TelevisionOriginalSound extends NeteaseCloudMusicSongSheet{@Overridepublic String getS_code() {return "WYYYSYS_GD_3521";}@Overridepublic String getS_name() {return "影视原声";}@Overridepublic String getS_cdate() {return "2017-03-10";}@Overridepublic String getS_songRows() {return "21首";}@Overridepublic String getS_face() {return "images\121";}}


然后编写播放程序

/** *  * ClassName: 播放服务 <br/>  * Function: TODO ADD FUNCTION. <br/>  * Reason: TODO ADD REASON(可选). <br/>  * @version */public class PlayServer {//进入歌单选项列表private NeteaseCloudMusicSongSheet neteaseCloudMusicSongSheet;    public PlayServer(NeteaseCloudMusicSongSheet _neteaseCloudMusicSongSheet) {this.neteaseCloudMusicSongSheet = _neteaseCloudMusicSongSheet;}//开始播放      public void playStart(){          System.out.println("====您已进入该歌单,开始循环播放列表下的所有歌曲====");          System.out.println("编号:" + neteaseCloudMusicSongSheet.getS_code());        System.out.println("歌单名:" + neteaseCloudMusicSongSheet.getS_name());    System.out.println("封面:" + neteaseCloudMusicSongSheet.getS_face());    System.out.println("收录歌曲数量:" + neteaseCloudMusicSongSheet.getS_songRows());     System.out.println("创建时间:" + neteaseCloudMusicSongSheet.getS_cdate());    }  }

测试

import java.util.Scanner;public class MainTest {public static void main(String[] args) {Scanner sc=new Scanner(System.in);NeteaseCloudMusicSongSheet n=null;PlayServer p=null;while(true){System.err.println("\n请点击(输入歌单编号)如:【WYYYSYS_GD_3521】或【WYYHYJD_GD_7231】");String str=sc.next();switch (str) {case "WYYYSYS_GD_3521": n=new TelevisionOriginalSound();p=new PlayServer(n);break;case "WYYHYJD_GD_7231":n=new ChineseClassics();    p=new PlayServer(n);break;default:break;}p.playStart();}}}



1 0
原创粉丝点击