开发一个应用,模拟移动存储设备的读写,即计算机与U盘、MP3、移动硬盘等设备进行数据交换。包括:
1.U盘(UDis)、MP3、移动硬盘(FlashDisk)等设备类:要求每种设备类型都是一个单独的类,都能提供读、写(read、write)方法,读写方法的内容不同;MP3Player还有一个playMusic方法。(用System.out.println()输出不同内容,以标识方法内容不同)
2.Computer类:能调用移动设备的方法,进行数据读、写;
3.Work主类:包含main函数,模拟工作场景:新来一台电脑;新来上述移动设备;依次接入上述移动设备、读写数据;
要求1.不使用抽象类、接口,实现上述需求;2.使用接口实现上述需求;
3、假设新增一种移动设备IdeDisk,请为其编写程序,加入到上述两套程序中,并运行之;
4、尝试新增一种移动设备OldDisk,其读写方法分别为du、xie;请为其编写程序,加入到上述两套程序中,并运行之;
1.需求分析:因为不使用抽象类和接口,那就将需要的类都声明出来,并一一声明对象。会有Work类、Computer类、UDis类、MP3类、FlashDisk类、IdeDisk类、OldDisk类。在computer类中实现调用移动设备的方法,进行数据读、写;在work类中模拟工作场景
2.代码
//各类分别放在不同的文件中
//UDis.java
public class UDis {
void write() {
System.out.println("U盘开始写入数据!");
System.out.println("U盘写入数据完成!");
}
void read() {
System.out.println("U盘开始读取数据!");
System.out.println("U盘读取数据完成!");
}
}
//FlashDisk.java
public class FlashDisk {
void write() {
System.out.println("FlashDisk开始写入数据!");
System.out.println("FlashDisk写入数据完成!");
}
void read() {
System.out.println("FlashDisk开始读取数据!");
System.out.println("FlashDisk读取数据完成!");
}
}
//MP3.java
public class MP3 {
void write() {
System.out.println("MP3开始写入数据!");
System.out.println("MP3写入数据完成!");
}
void read() {
System.out.println("MP3开始读取数据!");
System.out.println("MP3读取数据完成!");
}
void playMusic() {
System.out.println("MP3开始播放音乐!");
System.out.println("MP3结束播放音乐!");
}
}
//IdeDisk.java
public class IdeDisk {
void write() {
System.out.println("IdeDisk开始写入数据!");
System.out.println("IdeDisk写入数据完成!");
}
void read() {
System.out.println("IdeDisk开始读取数据!");
System.out.println("IdeDisk读取数据完成!");
}
}
//OldDisk.java
public class OldDisk {
void xie() {
System.out.println("OldDisk 开始写入数据!");
System.out.println("OldDisk 写入数据完成!");
}
void du() {
System.out.println("OldDisk 开始读取数据!");
System.out.println("OldDisk读取数据完成!");
}
}
//Computer.java
public class Computer{
Computer(){
String str = "有一台新电脑";
System.out.println(str);
}
void insertUDis() {
String str = "****************************************";
System.out.println(str);
System.out.println("插入u盘");
}
void insertMP3() {
String str = "****************************************";
System.out.println(str);
System.out.println("插入MP3");
}
void insertFlashDisk() {
String str = "****************************************";
System.out.println(str);
System.out.println("插入移动硬盘");
}
void insertIdeDisk() {
String str = "****************************************";
System.out.println(str);
System.out.println("插入IdeDisk");
}
void insertOldDisk () {
String str = "****************************************";
System.out.println(str);
System.out.println("插入OldDisk ");
}
void readUDis(UDis upan) {
String str = "****************************************";
System.out.println(str);
upan.read();
}
void writeUDis(UDis upan) {
String str = "****************************************";
System.out.println(str);
upan.write();
}
void readMP3(MP3 mp3) {
String str = "****************************************";
System.out.println(str);
//mp3.write();
mp3.read();
//mp3.playMusic();
}
void writeMP3(MP3 mp3) {
String str = "****************************************";
System.out.println(str);
mp3.write();
//mp3.read();
//mp3.playMusic();
}
void playMusic(MP3 mp3) {
String str = "****************************************";
System.out.println(str);
//mp3.write();
//mp3.read();
mp3.playMusic();
}
void readFlahDisk(FlashDisk disk) {
String str = "****************************************";
System.out.println(str);
//disk.write();
disk.read();
}
void writeFlahDisk(FlashDisk disk) {
String str = "****************************************";
System.out.println(str);
disk.write();
//disk.read();
}
void readIdeDisk(IdeDisk disk2) {
String str = "****************************************";
System.out.println(str);
//disk.write();
disk2.read();
}
void writeIdeDisk(IdeDisk disk2) {
String str = "****************************************";
System.out.println(str);
disk2.write();
//disk.read();
}
void readOldDisk (OldDisk disk3) {
String str = "****************************************";
System.out.println(str);
//disk.write();
disk3.du();
}
void writeOldDisk (OldDisk disk3) {
String str = "****************************************";
System.out.println(str);
disk3.xie();
//disk.read();
}
}
//Work.java
public class Work {
public static void main(String args[]) {
Computer PC = new Computer();
System.out.println("有几个新设备");
UDis upan = new UDis();
MP3 mp3 = new MP3();
FlashDisk disk = new FlashDisk();
IdeDisk disk2 = new IdeDisk();
OldDisk disk3 = new OldDisk();
PC.insertUDis();
PC.insertMP3();
PC.insertFlashDisk();
PC.insertIdeDisk();
PC.insertOldDisk();
PC.readMP3(mp3);
PC.writeMP3(mp3);
PC.playMusic(mp3);
PC.readFlahDisk(disk);
PC.writeFlahDisk(disk);
PC.readUDis(upan);
PC.writeUDis(upan);
PC.readIdeDisk(disk2);
PC.writeIdeDisk(disk2);
PC.readOldDisk(disk3);
PC.writeOldDisk(disk3);
}
}
三、使用接口实现上述需求
1.需求分析:
有work类、Computer类、UDis类、MP3类、FlashDisk类、IdeDisk类、OldDisk类。使用接口,因为UDis类、MP3类、FlashDisk类、IdeDisk类等设备具有类似的方法(write和read),则设计一个Device接口,包含write()和read()方法,各设备通过实现接口获得接口中的方法并重写接口中的方法,MP3Player类中添加PlayMusic方法。在Computer类中将实现接口的类的对象的引用赋值给接口变量,实现接口回调,实现多态。
2.原理:在Device接口中声明read()和write方法,UDis类、MP3Player类、FlashDisk类、IdeDisk类、OldDisk类会实现Device接口,并重写read()和write()方法,就比如UDis类将write()的方法体重写成--System.out.println("U盘开始写入数据!");System.out.println("U盘写入数据完成!");--,MP3Player类添加playMusic()方法。在Work类中首先声明Computer对象,再一一实现各设备对象的声明并将对象的引用传递给在Computer类中的接口变量disk,而在Computer类中利用接口变量disk实现接口回调实现多态。而对于OldDisk,由于其方法不同于其他设备
,它通过OldDiskAdapter类进行转换
3.代码:
/各类存放在同一项目的不同类文件中
//Device.java
package task2;
public interface Device {
void read();
void write();
}
//UDis.java
package task2;
public class UDis implements Device {
public void write(){//不能省略public
System.out.println("U盘开始写入数据!");
System.out.println("U盘写入数据完成!");
}
public void read() {
System.out.println("U盘开始读取数据!");
System.out.println("U盘读取数据完成!");
}
}
//FlashDisk.java
package task2;
public class FlashDisk implements Device {
public void write() {
System.out.println("FlashDisk开始写入数据!");
System.out.println("FlashDisk写入数据完成!");
}
public void read() {
System.out.println("FlashDisk开始读取数据!");
System.out.println("FlashDisk读取数据完成!");
}
}
//MP3Player.java
package task2;
public class MP3Player implements Device {
public void write() {
System.out.println("MP3Player开始写入数据!");
System.out.println("MP3Player写入数据完成!");
}
public void read() {
System.out.println("MP3Player开始读取数据!");
System.out.println("MP3Player读取数据完成!");
}
public void playMusic(){
System.out.println("MP3开始播放音乐!");
System.out.println("MP3结束播放音乐!");
}
}
//IdeDisk.java
package task2;
public class IdeDisk implements Device{
public void write() {
System.out.println("IdeDisk开始写入数据!");
System.out.println("IdeDisk写入数据完成!");
}
public void read() {
System.out.println("IdeDisk开始读取数据!");
System.out.println("IdeDisk读取数据完成!");
}
}
//OldDisk.java
package task2;
public class OldDisk {
public void xie(){//不能省略public
System.out.println("OldDisk开始写入数据!");
System.out.println("OldDisk写入数据完成!");
}
public void du() {
System.out.println("OldDisk开始读取数据!");
System.out.println("OldDisk读取数据完成!");
}
}
//OldDiskAdapter.java
package task2;
public class OldDiskAdapter implements Device{
private OldDisk oldDisk;
OldDiskAdapter(OldDisk oldDisk1){
this.oldDisk = oldDisk1;
}
public void read() {
oldDisk.du();
}
public void write() {
oldDisk.xie();
}
}
//Computer.java
package task2;
public class Computer {
Computer(){
String str = "有一台新电脑";
System.out.println(str);
}
Device disk;
public void insertDevice(Device disk) {
String str = "****************************************";
System.out.println(str);
System.out.println("插入一个设备");
this.disk = disk;
}
public void read() {
disk.read();
}
public void write() {
disk.write();
}
}
//Work.java
package task2;
public class Work {
public static void main(String args[]) {
Computer PC = new Computer();
PC.insertDevice(new UDis());
PC.read();
PC.write();
PC.insertDevice(new FlashDisk());
PC.read();
PC.write();
MP3Player mp3 = new MP3Player();
PC.insertDevice(mp3);
PC.read();
PC.write();
mp3.playMusic();
PC.insertDevice(new IdeDisk());
PC.read();
PC.write();
PC.insertDevice(new OldDiskAdapter(new OldDisk()));
PC.write();
PC.read();
}
}