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

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





    }

}
 

实验结果:

 

 

  • 4
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值