设计模式综合-媒体播放器的实现
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();}}
实验结果:
设计模式综合-媒体播放器的实现相关推荐
- 支持avi mkv的html视频插件,PS4更新加入媒体播放器 支持多种音频视频格式
就在今天E3之后,PlayStation官方博客发表了公告称,新的媒体播放器功能已更新至PS4之中.这样使得你的PS4可以成为一个玩游戏之外的综合媒体播放设备,玩家可以通过Wifi或使用USB将电影和 ...
- android媒体播放器课程设计,基于Android的多媒体播放器课程设计报告
基于Android的多媒体播放器课程设计报告 p/*/pp源代码. 我希望这篇文章对初学者有帮助. 希望更多的人在网络上共享自己的学习成果./pp*/pp1 .开发环境/ppAndroid是基于Lin ...
- java 媒体播放器_Java多媒体播放器(三)
No.3 vlcj 一.简介 The vlcj project first gives you Java bindings to just about all of the native functi ...
- 【翻译】HTML5基于浏览器的媒体播放器:可以离线播放你的mp3文件
原文地址:http://www.omgubuntu.co.uk/2011/03/html5-browser-based-media-player-plays-your-mp3s-works-offli ...
- Plyr – 简单,灵活的 HTML5 媒体播放器
Plyr 是一个简单的 HTML5 媒体播放器,包含自定义的控制选项和 WebVTT 字幕.它是只支持现代浏览器,轻量,方便和可定制的媒体播放器.还有的标题和屏幕阅读器的全面支持. 在线演示 ...
- QT实现Media Player(媒体播放器)
QT实现Media Player 项目简介 项目技术 项目展示 主要源码片段解析 获取完整项目源码传送门 项目简介 Media Player示例使用Microsoft Media Player Act ...
- linux 桌面显示视频播放器,Ubuntu 13.10开启媒体播放器VLC桌面通知的步骤
VLC是一款多功能的媒体播放器,支持众多音频及视频格式,能够适用于Ubuntu等系统,而VLC播放器有桌面通知功能,需要手动开启,下面小编就以Ubuntu 13.10为例,给大家详细介绍下Ubuntu ...
- 媒体播放器三大底层架构
2019独角兽企业重金招聘Python工程师标准>>> 媒体播放工具,这里主要指视频播放,因为要面临庞大的兼容性和纷繁复杂的算法,从架构上看,能脱颖而出的体系屈指可数.大体来说业界主 ...
- 直通输出设备 android kodi,【本地播放】利用Kodi媒体播放器轻松实现源码输出DTS到功放...
本帖最后由 PlyFly 于 2015-2-13 22:11 编辑 各位花粉注意了,本次发布的B056固件,华为终于修复了DTS源码输出到功放不能正常解码的问题(如功放无声音.破音等等).经实际测试, ...
最新文章
- PHP导入excel到mysql数据库完整代码附效果图
- IOS初级:UIAlertController
- svn错误 is already locked 解决方案
- 【域渗透】教你怎么利用DCSync导出域内所有用户hash
- 转载: 关于显著性检验,你想要的都在这儿了!!(基础篇)
- 【Python】55个案例:吃透Python字符串格式化
- linux启动mysql_Linux服务器安装Mysql教程
- Java——线程的四种不同形式
- 资源放送丨《MySQL在某航空业公司的架构选型演进之路》PPT视频
- Proxmark3 easy gui 5.13 版本 编译日期2019-4-17 冰人4月份最新固件
- 29.Jwt集成(3):token设置过期时间、异常判断
- document.documentElement.clientHeight与document.body.clientHeight的区别
- linux下载安装花生壳
- libyuv NV12裁剪
- python课程设计实验报告-python课程设计
- python 比对两个excel表数据_如何使用python比对两个excel表中的不同?
- 谷歌浏览器提示Adobe flash player不是最新版本的解决方法
- 计算概论(一)计算起源、图灵机、计算原理
- 【随笔】记录一次简易的液位报警器的拆机修理
- 服务器pcie 3.0装固态硬盘,PCIe SSD怎么装系统?实操发现竟然这么简单!