1. 媒体播放器的实现

(1)案例背景:

Windows Media Player 和 RealPlayer 是两种常用的媒体播放器,它们的 API 结构和调用方法存在差别,现在你的应用程序需要支持这两种播放器 API,并且将来可能还需要支持新的媒体播放器,根据给出的类图,回答该应用程序使用了哪些设计模式,并编程实现这个应用程序。

(2)实现步骤:

Ø 根据类图,回答这个应用程序使用了哪几种设计模式

工厂方法模式,适配器模式

  • 根据类图,实现这个应用程序的具体代码以及工具类 XMLUtil,使应用程序能够使用两种播放器的 API。
  • 编译并运行代码,实现应用程序对两种播放器的调用。
  • 设计模式的选用需要根据具体要求来进行
  • 多种设计模式可以进行混合使用

(3)案例总结:

代码结构:

详细代码:

PlayerFactory.java:

package playerAPI.Factory;import playerAPI.API.PlayerList;import playerAPI.Window.MainWindow;public  interface PlayerFactory {public  MainWindow createMainWindow();public PlayerList createPlayerList();}

RealPlayerFactory.java:
package playerAPI.Factory;import playerAPI.API.PlayerList;import playerAPI.API.RealPlayerList;import playerAPI.Window.MainWindow;import playerAPI.Window.RealPlayerWindow;public class RealPlayerFactory implements PlayerFactory {@Overridepublic MainWindow createMainWindow(){return new RealPlayerWindow();}@Overridepublic PlayerList createPlayerList(){return new RealPlayerList();}}

 
MediaPlayerFactory.java:
package playerAPI.Factory;import playerAPI.API.MediaPlayerList;import playerAPI.API.PlayerList;import playerAPI.Window.MainWindow;import playerAPI.Window.MediaPlayerWindow;import javax.annotation.Resource;public class MediaPlayerFactory implements PlayerFactory{@Overridepublic MainWindow createMainWindow(){return new MediaPlayerWindow();}@Overridepublic PlayerList createPlayerList(){return new MediaPlayerList();}}

MainWindow.java:
package playerAPI.Window;public interface MainWindow {public void window();}

 
 
MediaPlayerWindow.java:
package playerAPI.Window;import playerAPI.API.MediaPlayerAPI;public class MediaPlayerWindow implements MainWindow{public MediaPlayerAPI mediaplayerAPI;public MediaPlayerWindow() {mediaplayerAPI=new MediaPlayerAPI();}@Overridepublic void window() {System.out.println("MediaPlayerWindow");}}

 
RealPlayerWindow.java:
package playerAPI.Window;import playerAPI.API.RealPlayerAPI;public class RealPlayerWindow implements MainWindow{private RealPlayerAPI realplayerAPI=new RealPlayerAPI();@Overridepublic void window() {System.out.println("RealPlayerWindow");}}

 
PlayerList.java:
package playerAPI.API;public interface PlayerList {public void player();}

 
 
MediaPlayerAPI.java:
package playerAPI.API;public class MediaPlayerAPI {public void window() {System.out.println("MediaPlayer window");}public void player() {System.out.println("MediaPlayer player");}}

 
 
RealPlayerAPI.java:
package playerAPI.API;public class RealPlayerAPI {public void window() {System.out.println("RealPlayer window");}public void player() {System.out.println("RealPlayer player");}}

 
 
MediaPlayerList.java:
package playerAPI.API;public class MediaPlayerList implements PlayerList{public MediaPlayerAPI mediaplayerAPI;public MediaPlayerList() {mediaplayerAPI=new MediaPlayerAPI();}@Overridepublic void player() {System.out.println("MediaPlayerList");}}

 
 
RealPlayerList.java:
package playerAPI.API;public class RealPlayerList implements PlayerList {private RealPlayerAPI  realplayerAPI=new RealPlayerAPI();public RealPlayerList(){realplayerAPI = new RealPlayerAPI();}@Overridepublic void player() {System.out.println("RealPlayerList");}}

 
 
XMLUtil.java:
package playerAPI.Utils;import org.w3c.dom.*;import javax.xml.parsers.*;import org.xml.sax.SAXException;import java.io.*;public class XMLUtil {public static Object getBean(){try {//创建文档对象DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = dFactory.newDocumentBuilder();Document doc;doc = builder.parse(new File("src/playerAPI/Utils/config.xml"));//获取包含支付方式名称的文本节点NodeList nl = doc.getElementsByTagName("className");Node classNode=nl.item(0).getFirstChild();String cName=classNode.getNodeValue();//通过类名生成实例对象并将其返回Class c=Class.forName(cName);Object obj=c.newInstance();return obj;}catch (Exception e){e.printStackTrace();return null;}}}

 
 
 
config.xml:
<?xml version="1.0" ?><config><className>playerAPI.Factory.RealPlayerFactory</className></config>

 
 
 
ClientClass.java:
package playerAPI.Client;import playerAPI.API.PlayerList;import playerAPI.Factory.PlayerFactory;import playerAPI.Utils.XMLUtil;import playerAPI.Window.MainWindow;public class ClientClass {public static void main(String[] args) {System.out.println("软件1904班  白旭君  2019005368");PlayerFactory pfactory;MainWindow window;PlayerList list;pfactory = (PlayerFactory)XMLUtil.getBean();window = pfactory.createMainWindow();window.window();list = pfactory.createPlayerList();list.player();}}

 

实验结果:

设计模式综合-媒体播放器的实现相关推荐

  1. 支持avi mkv的html视频插件,PS4更新加入媒体播放器 支持多种音频视频格式

    就在今天E3之后,PlayStation官方博客发表了公告称,新的媒体播放器功能已更新至PS4之中.这样使得你的PS4可以成为一个玩游戏之外的综合媒体播放设备,玩家可以通过Wifi或使用USB将电影和 ...

  2. android媒体播放器课程设计,基于Android的多媒体播放器课程设计报告

    基于Android的多媒体播放器课程设计报告 p/*/pp源代码. 我希望这篇文章对初学者有帮助. 希望更多的人在网络上共享自己的学习成果./pp*/pp1 .开发环境/ppAndroid是基于Lin ...

  3. java 媒体播放器_Java多媒体播放器(三)

    No.3 vlcj 一.简介 The vlcj project first gives you Java bindings to just about all of the native functi ...

  4. 【翻译】HTML5基于浏览器的媒体播放器:可以离线播放你的mp3文件

    原文地址:http://www.omgubuntu.co.uk/2011/03/html5-browser-based-media-player-plays-your-mp3s-works-offli ...

  5. Plyr – 简单,灵活的 HTML5 媒体播放器

    Plyr 是一个简单的 HTML5 媒体播放器,包含自定义的控制选项和 WebVTT 字幕.它是只支持现代浏览器,轻量,方便和可定制的媒体播放器.还有的标题和屏幕阅读器的全面支持. 在线演示      ...

  6. QT实现Media Player(媒体播放器)

    QT实现Media Player 项目简介 项目技术 项目展示 主要源码片段解析 获取完整项目源码传送门 项目简介 Media Player示例使用Microsoft Media Player Act ...

  7. linux 桌面显示视频播放器,Ubuntu 13.10开启媒体播放器VLC桌面通知的步骤

    VLC是一款多功能的媒体播放器,支持众多音频及视频格式,能够适用于Ubuntu等系统,而VLC播放器有桌面通知功能,需要手动开启,下面小编就以Ubuntu 13.10为例,给大家详细介绍下Ubuntu ...

  8. 媒体播放器三大底层架构

    2019独角兽企业重金招聘Python工程师标准>>> 媒体播放工具,这里主要指视频播放,因为要面临庞大的兼容性和纷繁复杂的算法,从架构上看,能脱颖而出的体系屈指可数.大体来说业界主 ...

  9. 直通输出设备 android kodi,【本地播放】利用Kodi媒体播放器轻松实现源码输出DTS到功放...

    本帖最后由 PlyFly 于 2015-2-13 22:11 编辑 各位花粉注意了,本次发布的B056固件,华为终于修复了DTS源码输出到功放不能正常解码的问题(如功放无声音.破音等等).经实际测试, ...

最新文章

  1. PHP导入excel到mysql数据库完整代码附效果图
  2. IOS初级:UIAlertController
  3. svn错误 is already locked 解决方案
  4. 【域渗透】教你怎么利用DCSync导出域内所有用户hash
  5. 转载: 关于显著性检验,你想要的都在这儿了!!(基础篇)
  6. 【Python】55个案例:吃透Python字符串格式化
  7. linux启动mysql_Linux服务器安装Mysql教程
  8. Java——线程的四种不同形式
  9. 资源放送丨《MySQL在某航空业公司的架构选型演进之路》PPT视频
  10. Proxmark3 easy gui 5.13 版本 编译日期2019-4-17 冰人4月份最新固件
  11. 29.Jwt集成(3):token设置过期时间、异常判断
  12. document.documentElement.clientHeight与document.body.clientHeight的区别
  13. linux下载安装花生壳
  14. libyuv NV12裁剪
  15. python课程设计实验报告-python课程设计
  16. python 比对两个excel表数据_如何使用python比对两个excel表中的不同?
  17. 谷歌浏览器提示Adobe flash player不是最新版本的解决方法
  18. 计算概论(一)计算起源、图灵机、计算原理
  19. 【随笔】记录一次简易的液位报警器的拆机修理
  20. 服务器pcie 3.0装固态硬盘,PCIe SSD怎么装系统?实操发现竟然这么简单!

热门文章

  1. 【SequoiaDB|巨杉数据库】整体架构Ⅰ
  2. 舆情产业链四大环节密切协同
  3. 搜索引擎优化,SEO关键词快速排名方法有哪些?
  4. EAUML日拱一卒-微信小程序实战:位置闹铃 (17)-保存和取出设定信息
  5. 摘:一张废手机卡的作用
  6. 解决 Elasticsearch 分页查询记录超过10000时异常
  7. 第一次书写标书和述标经历
  8. 【Lyra UI】UI 玩法逻辑小结
  9. CU4C字符集检测和转换,C++版本
  10. Matter Project 入门 – 构建和运行照明应用程序示例