java_1115

定义一个接口 MediaPlayer,表示家庭影院的一个设备。MediaPlayer 中
包含 play(),stop(), open()三个方法,分别表示播放、停止和开仓功能。 
MediaPlayer 有三个实现类,分别为: DVDPlayer,表示 DVD 播放器; CDPlayer,
表示 CD 播放器;TapePlayer,表示录音机(播放磁带)。 
类图如下: 

15191846_fF6w.png

tu.png899x458 15 KB


创建一个遥控器 Controller 类。该遥控器有三个控制通道,可以分别控制三个
设备。部分代码如下: 
class Controller{ 
private MediaPlayer[] players; 
public Controller(){ 
//构造函数中初始化 players 数组 } 
//对相应的设备调用 play 方法 
public void play(int i){ 
players[i].play(); } } 
要求: 
1) 完成 MediaPlayer 接口及其子类的代码。 
2) 把 Controller 补充完整,完善其构造函数,并为其增加 stop(int i)和
open(int i)方法

 

 

 

源代码如下:

接口:MediaPlayer

package org.jsoft.test3;

public interface MediaPlayer {
    void play();

    void stop();

    void open();

}

 

子类:DVDPlayer

package org.jsoft.test3;

public class DVDPlayer implements MediaPlayer {

    @Override
    public void play() {
        // TODO Auto-generated method stub
        System.out.println("使用DVD播放器播放");
    }

    @Override
    public void stop() {
        // TODO Auto-generated method stub
        System.out.println("停止DVD播放器播放");
    }

    @Override
    public void open() {
        // TODO Auto-generated method stub
        System.out.println("打开DVD播放器的DVD槽");
    }

}
 

子类:CDPlayer

package org.jsoft.test3;

public class CDPlayer implements MediaPlayer {

    @Override
    public void play() {
        // TODO Auto-generated method stub
        System.out.println("使用CD播放器播放");
    }

    @Override
    public void stop() {
        // TODO Auto-generated method stub
        System.out.println("停止CD播放器");
    }

    @Override
    public void open() {
        // TODO Auto-generated method stub
        System.out.println("打开CD播放器CD槽");
    }

}

 


子类:TapePlayer

 

package org.jsoft.test3;

public class TapePlayer implements MediaPlayer {

    @Override
    public void play() {
        // TODO Auto-generated method stub
        System.out.println("使用磁带播放机播放磁带");
    }

    @Override
    public void stop() {
        // TODO Auto-generated method stub
        System.out.println("停止磁带播放");
    }

    @Override
    public void open() {
        // TODO Auto-generated method stub
        System.out.println("打开磁带播放机磁带槽");
    }

}
 

子类:Controller

 

package org.jsoft.test3;

public class Controller {

    private MediaPlayer[] players;//仅仅是声明语句,并未进行初始化(并没给其开辟空间,所以才在构造函数里面初始化)

    public Controller(MediaPlayer t, MediaPlayer d, MediaPlayer cd) {
        // 构造函数中初始化 players数组
        this.players = new MediaPlayer[3];
        this.players[0] = t;// 在此有参构造函数中直接将
        this.players[1] = d;// MediaPlayer创建的指向各个子类的对象输入
        this.players[2] = cd;
    }

    // 对相应的设备调用 play 方法

    public void play(int i)// 各种方法的调用

    {
        players[i].play();
    }

    public void stop(int i)

    {
        players[i].stop();
    }

    public void open(int i) {

        players[i].open();

    }

}
 

   测试类:Test

package org.jsoft.test3;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        MediaPlayer t = new TapePlayer();// 类似与抽象的父类,用接口创建指向继承接口的各自类的对象。
        MediaPlayer d = new DVDPlayer();
        MediaPlayer cd = new CDPlayer();
        Controller c = new Controller(t, d, cd);// 利用构造函数将接口子类创建好的对象传入
        System.out.println("尊敬的客户,您好,欢迎来到吉软57号豪华家庭影院!" + '\n' + "请问您有需要什么服务吗?");
        System.out.println("可选服务选择如下:");
        while (true) {
            System.out.println("");
            System.out.println("");
            System.out.println("1-录音机相关" + '\n' + "2-DVD播放器相关" + '\n'
                    + "3-CD播放器相关");
            int i = in.nextInt();

            if (i == 1) {
                System.out.println("1-播放" + " " + "2-暂停" + " "
                        + "3-打开插槽盘换新类别播放");
                int j = in.nextInt();
                if (j == 1) {
                    c.play(0);
                } else if (j == 1) {
                    c.stop(2);
                } else {
                    c.open(0);
                }
            } else if (i == 2) {

                System.out.println("1-播放" + " " + "2-暂停" + " "
                        + "3-打开插槽盘换新类别播放");
                int j = in.nextInt();
                if (j == 1) {
                    c.play(1);
                } else if (j == 2) {
                    c.stop(1);
                } else {
                    c.open(1);
                }
            }

            else {
                System.out.println("1-播放" + " " + "2-暂停" + " "
                        + "3-打开插槽盘换新类别播放");
                int j = in.nextInt();
                if (j == 1) {
                    c.play(2);
                } else if (j == 2) {
                    c.stop(2);
                } else {
                    c.open(2);
                }
            }

        }
    }
}
 

 

执行效果图:

191646_IBJW_3715016.png

191705_Ygo1_3715016.png

 

 

 

 

 

转载于:https://my.oschina.net/u/3715016/blog/1574144

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值