1.需求:
面向对象编程实现智能家居控制系统(简单的开关)
2.实现思路
1.定义设备类:创建设备对象代表家里的设备
JD类:
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
//家电类
public class JD {
private String name;
private boolean status;//状态
}
Air类:
// 空调
public class Air extends JD {
public Air(String name, boolean b) {
super(name, b);
}
}
TV类:
// 电视
public class TV extends JD {
public TV(String name, boolean b) {
super(name, b);
}
}
Light类:
// 灯
public class Light extends JD {
public Light(String name, boolean b) {
super(name, b);
}
}
赋值:
JD[] jds = new JD[3];
jds[0] = new TV ("小米电视", true);
jds[1] = new Air ("小米空调", false);
jds[2] = new Light ("小米台灯", false);
2.创建开关接口 press() ,并在 JD 类中实现
开关接口:
// 接口
public interface Switch {
void press();// 开关抽象方法
}
实现:
@Override//实现按钮
public void press() {
status = !status;
}
3.创建智能控制类和对象,进行开关操作(操作具体实现类)
Smart类:打印状态和进行开关操作
public class Smart {
public void control(JD jd) {//控制开关
System.out.println(jd.getName() + " 当前的状态: "+(jd.isStatus()?"开":"关"));
System.out.println("按下开关");
jd.press();//调用接口
System.out.println(jd.getName() + " 当前的状态: "+(jd.isStatus()?"开":"关"));
}
public void print(JD[] jds) {//打印所有开关的状态
for (int i = 0; i < jds.length; i++) {
System.out.println((i+1) + jds[i].getName() + " 当前的状态: "+(jds[i].isStatus()?"开":"关"));
}
System.out.println("=======================");
}
}
4.提示用户操作:使用循环,让用户输入设备编号,然后根据编号找到设备对象,调用开关方法
Smart s = new Smart();
while (true){
//打印所有设备信息
s.print(jds);
System.out.println("请输入序号选择要控制的设备(exit 退出系统)");
Scanner sc = new Scanner(System.in);
String n = sc.next();
switch (n) {
case "1":
s.control(jds[0]);
break;
case "2":
s.control(jds[1]);
break;
case "3":
s.control(jds[2]);
break;
case "exit":
System.out.println("退出系统");
return;
default:
System.out.println("输入有误,请重新输入");
}
}
3.结果输出
4.完整代码
Test类:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
JD[] jds = new JD[3];
jds[0] = new TV ("小米电视", true);
jds[1] = new Air ("小米空调", false);
jds[2] = new Light ("小米台灯", false);
Smart s = new Smart();
while (true){
//打印所有设备信息
s.print(jds);
System.out.println("请输入序号选择要控制的设备(exit 退出系统)");
Scanner sc = new Scanner(System.in);
String n = sc.next();
switch (n) {
case "1":
s.control(jds[0]);
break;
case "2":
s.control(jds[1]);
break;
case "3":
s.control(jds[2]);
break;
case "exit":
System.out.println("退出系统");
return;
default:
System.out.println("输入有误,请重新输入");
}
}
}
}
JD类:
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
//家电类
public class JD implements Switch {
private String name;
private boolean status;//状态
@Override//实现按钮
public void press() {
status = !status;
}
}
Air类:
// 空调
public class Air extends JD {
public Air(String name, boolean b) {
super(name, b);
}
}
Light类:
// 灯
public class Light extends JD {
public Light(String name, boolean b) {
super(name, b);
}
}
TV类:
// 电视
public class TV extends JD {
public TV(String name, boolean b) {
super(name, b);
}
}
Switch接口:
// 接口
public interface Switch {
void press();// 开关抽象方法
}
Smart类:
public class Smart {
public void control(JD jd) {//控制开关
System.out.println(jd.getName() + " 当前的状态: "+(jd.isStatus()?"开":"关"));
System.out.println("按下开关");
jd.press();//调用接口
System.out.println(jd.getName() + " 当前的状态: "+(jd.isStatus()?"开":"关"));
}
public void print(JD[] jds) {//打印所有开关的状态
for (int i = 0; i < jds.length; i++) {
System.out.println((i+1) + jds[i].getName() + " 当前的状态: "+(jds[i].isStatus()?"开":"关"));
}
System.out.println("=======================");
}
}