需求:
使用面向对象编程模拟:设计一个电脑对象,可以安装2个USB设备
- 鼠标:被安装时可以完成接入、调用点击功能、拔出功能。
- 键盘:被安装时可以完成接入、调用打字功能、拔出功能。
分析
- 定义一个USB的接口(申明USB设备的规范必须是:可以接入和拔出)
- 提供2个USB实现类代表鼠标和键盘,让其实现USB接口,并分别定义独有功能。
- 创建电脑对象,创建2个USB实现类对象,分别安装到电脑中并触发功能的执行。
创建USB接口
public interface USB {
/**
* 接入
*/
void connect();
/**
* 拔出
*/
void unconnected();
}
创建键盘类
public class Keyboard implements USB {
private String name;
public Keyboard(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void connect() {
System.out.println(name + "接入电脑");
}
@Override
public void unconnected() {
System.out.println(name + "从电脑拔出");
}
public void keyDown() {
System.out.println(name + "敲键盘了");
}
}
创建鼠标类
public class Mouse implements USB {
private String name;
public Mouse(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void connect() {
System.out.println(name + "接入电脑");
}
@Override
public void unconnected() {
System.out.println(name + "从电脑拔出");
}
public void dbClick() {
System.out.println(name + "双击了");
}
}
创建电脑类
public class Computer {
private String name;
public Computer(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void installUSB(USB usb) {
//usb可能是键盘也可能是鼠标,这里使用多态
usb.connect();
//独有功能先判断再强转
if (usb instanceof Keyboard) {
Keyboard k = (Keyboard) usb;
k.keyDown();
} else if (usb instanceof Mouse) {
Mouse m = (Mouse) usb;
m.dbClick();
}
usb.unconnected();
}
public void start() {
System.out.println("开机");
}
}
创建测试类
public class Test {
public static void main(String[] args) {
//创建电脑对象
Computer c = new Computer("外星人");
c.start();
//创建usb设备
USB u1 = new Keyboard("机械键盘");
c.installUSB(u1);
USB u2 = new Mouse("机械鼠标");
c.installUSB(u2);
}
}