设计模式综合-媒体播放器的实现

news/2024/12/22 18:59:52/

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();}}
 

实验结果:

 

 


http://www.ppmy.cn/news/379571.html

相关文章

G711音频文件播放器

Android 采集音视频 &#xff0c;编码G711音频&#xff1a;https://download.csdn.net/download/m0_37039192/12469563 使用 Audacity 音频播放器&#xff0c;能播放G711文件。 官网地址&#xff1a;https://www.audacityteam.org/ 步骤&#xff1a;文件 > 导入 > 原…

电脑如何播放杜比视界视频

普通笔记本或台式机电脑&#xff0c;如何播放杜比视界视频呢&#xff1f; 1.安装HEVC插件 根据自己电脑的CPU架构&#xff08;x86、x64、arm三种&#xff09;下载安装相应的HEVC插件离线包&#xff0c;双击 Microsoft.HEVCVideoExtension_1.0.21821.0_x64__8wekyb3d8bbwe.Appx…

小程序快速渲染机制及双线程技术解析

不管我们对于小程序这种形态存在何种质疑&#xff0c;但不可否认已经融入到我们生活的方方面面&#xff0c;出门打车、扫码、点外卖甚至收能量等等操作都是以小程序进行承载。背后的缘由是小程序足够轻量、便捷、跨平台等特点&#xff0c;为用户提供了丰富的功能和优质的用户体…

QMediaPlayer多媒体播放操作事项

QMediaPlayer多媒体播放操作事项 要使用QMediaPlayer播放视频&#xff0c;必须在.pro文件中加入 multimedia multimediawidgets&#xff0c;如下&#xff1a; QT core gui widgets multimedia multimediawidgets 加入头文件 #include <QMediaPlayer> #include <QV…

JAVA家庭多媒体播放器(学校作业)

public class Controller {private boolean bind;FXMLprivate AnchorPane root;//画板FXMLprivate MediaView Myview;FXMLprivate Slider jfxSlider;FXMLprivate Slider soundss;FXMLprivate ImageView play;FXMLprivate ImageView sound;FXMLprivate ImageView stop;FXMLpriva…

走进音视频的世界——杜比音效之AC3与AC4

杜比音效是由杜比实验室开发的&#xff0c;涉及多声道音频压缩技术。这种数字压缩技术目标是生成数字音频信号&#xff0c;当解码重现时&#xff0c;声音与原始信号相同。同时使用最低码率进行压缩&#xff0c;提供真实的立体环绕声。因此&#xff0c;杜比音效广泛应用于电影院…

X-CUBE-USB-AUDIO 资料篇④——USB音频流传输实例(音频播放+音频录制)

文章目录 一、音频播放二、音频录制 所有的USB控制通过EP 0端点。 一、音频播放 STM32F446E-EVAL和STM32F769IDISCOVERY 主机将音频流接口的备用设置设置设置为“1”后&#xff0c;开始传输PCM样本。对于接收到的每个数据包&#xff0c;USB IP将其写入FIFO内存&#xff0c;然…

Android -- 多媒体播放之MediaPlayer基础简介

Android -- MediaPlayer基础简介 MediaPlayer是Android中的一个多媒体播放类&#xff0c;我们能通过它控制音视频流或本地音视频资源的播放过程。 这段时间查阅了Android官方文档对MediaPlayer的介绍&#xff0c;同时也看了一些书籍介绍。现在把MediaPlayer的基础内容在此做一…