接口,封装练习

这个题大多数初学者应该都会遇见:

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

 创建一个遥控器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)方法 。

代码:

接口:

package com.xiaobai;

//接口,媒体播放机
public interface MediaPlayer {
	// 播放
	void play();

	// 停止
	void stop();

	// 开仓
	void open();
}

 

DVDPlayer类:

package com.xiaobai;

//DVD播放机
public class DVDPlayer implements MediaPlayer {

	@Override
	public void play() {
		System.out.println("播放DVD");
	}

	@Override
	public void stop() {
		System.out.println("停止播放DVD");
	}

	@Override
	public void open() {
		System.out.println("打开DVD仓");
	}

}

 CDPlayer类:

package com.xiaobai;

//CD播放机
public class CDPlayer implements MediaPlayer {

	@Override
	public void play() {
		System.out.println("播放CD");
	}

	@Override
	public void stop() {
		System.out.println("停止播放CD");
	}

	@Override
	public void open() {
		System.out.println("弹出CD仓");
	}

}

TapePlayer类:

package com.xiaobai;

//录音机
public class TapePlayer implements MediaPlayer {

	@Override
	public void play() {
		System.out.println("播放磁带");
	}

	@Override
	public void stop() {
		System.out.println("停止播放磁带");

	}

	@Override
	public void open() {
		System.out.println("弹出磁带仓");
	}

}

 

上面其实都好写,这一步比较难一点,需要用到封装返回播放器类型,数组存储对象

 Controller类:

package com.xiaobai;

//遥控器
public class Controller {
	// 保存成员
	private MediaPlayer[] players;

	public MediaPlayer[] getPlayers() {
		return players;
	}

	public void setPlayers(MediaPlayer[] players) {
		this.players = players;
	}

	public Controller() {
		// 构造函数中初始化players 数组
		// mp中保存三个播放器
		MediaPlayer[] mp = new MediaPlayer[3];
		mp[0] = new DVDPlayer();
		mp[1] = new CDPlayer();
		mp[2] = new TapePlayer();
		setPlayers(mp);
	}

	// 对相应的设备调用play 方法
	public void play(int i) {
		getPlayers()[i].play();
	}

	public void stop(int i) {
		getPlayers()[i].stop();
	}

	public void open(int i) {
		getPlayers()[i].open();
	}

}

 测试:

package com.xiaobai;
//测试媒体播放机
public class TestMedPla {
	public static void main(String[] args) {
		Controller c = new Controller();
		c.play(0);
		c.stop(0);
		c.open(0);
		System.out.println("============");
		c.play(1);
		c.stop(1);
		c.open(1);
		System.out.println("============");
		c.play(2);
		c.stop(2);
		c.open(2);
	}

}

 

测试结果:

播放DVD
停止播放DVD
打开DVD仓
============
播放CD
停止播放CD
弹出CD仓
============
播放磁带
停止播放磁带
弹出磁带仓
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值