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 {
@Override
public MainWindow createMainWindow(){
return new RealPlayerWindow();
}
@Override
public 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{
@Override
public MainWindow createMainWindow(){
return new MediaPlayerWindow();
}
@Override
public 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();
}
@Override
public 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();
@Override
public 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();
}
@Override
public 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();
}
@Override
public 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();
}
}
实验结果:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/128196.html