文章目录
- 一、需求
- 二、业务分析
- 三、具体实现
- 创建一个功能接口,实现设备的开关
- 创建一个家电类,作为功能接口的实现类,定义名字和状态
- 分别创建电视机、洗衣机、电灯的类,继承家电类
- Tv类
- WashMachine类
- Lamp类
- 定义智能控制系统类(单例),控制调用设备的开和关
- 主程序
- 四、代码结构
- 五、实现效果
- 六、参考视频
一、需求
用户通过智能家居控制系统来控制家用设备(电视机、洗衣机、电灯)的开关。
二、业务分析
目标:面向对象编程,实现智能家居控制系统
角色:设备(电视机、洗衣机、电灯)
功能:开和关
谁来控制设备:智能家居控制系统
三、具体实现
创建一个功能接口,实现设备的开关
Switch接口
package com.itheima.smartctlsys;
public interface Switch {
// 定义一个成员方法,来控制开关状态
void controlStatus();
}
创建一个家电类,作为功能接口的实现类,定义名字和状态
HomeDevice
package com.itheima.smartctlsys;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data // 生成get set方法
@NoArgsConstructor // 生成无参构造方法
@AllArgsConstructor // 生成有参构造方法
public class HomeDevice implements Switch {
private String name;
private boolean status; // 开关状态,默认为false
@Override
public void controlStatus() {
// 控制当前设备开和关
status = !this.status;
}
}
分别创建电视机、洗衣机、电灯的类,继承家电类
Tv类
package com.itheima.smartctlsys;
// 电视
public class Tv extends HomeDevice {
// 定义有参构造器
public Tv(String name, boolean status) {
super(name, status); // 调父类的有参构造器
}
}
WashMachine类
package com.itheima.smartctlsys;
// 定义洗衣机类
public class WashMachine extends HomeDevice {
// 定义有参构造器
public WashMachine(String name, boolean status) {
super(name, status); // 调父类的有参构造器
}
}
Lamp类
package com.itheima.smartctlsys;
// 灯
public class Lamp extends HomeDevice {
public Lamp(String name, boolean status) {
super(name, status); // 调父类的有参构造器
}
}
定义智能控制系统类(单例),控制调用设备的开和关
SmartControlSystem
package com.itheima.smartctlsys;
// 智能控制系统,单例模式
public class SmartControlSystem {
// 定义一个类变量,记住该类的唯一实例
private static final SmartControlSystem smartControlSystem = new SmartControlSystem();
// 私有化构造器
private SmartControlSystem () {
}
// 提供公共的静态方法,获取该类的唯一实例
public static SmartControlSystem getInstance() {
return smartControlSystem;
}
// 多态
public void controlDevice(HomeDevice device) {
System.out.println("你控制的设备为" + device.getName() + ",当前状态为:" + (device.isStatus() ? "开" : "关"));
System.out.println("请开始您的操作……");
device.controlStatus();
System.out.println("操作成功," + device.getName() + "的状态已调整为:" + (device.isStatus() ? "开" : "关"));
}
// 打印所有设备的状态
public void printAllDeviceStatus(HomeDevice[] devices) {
System.out.println("欢迎使用智能家居控制系统,所有设备的状态为:");
// 使用for循环,根据索引遍历每个设备
for (int i = 0; i < devices.length; i++) {
System.out.println((i + 1) + "," + devices[i].getName() + ":" + (devices[i].isStatus() ? "开" : "关"));
}
}
}
主程序
定义一个数组,存储家用设备的名字和状态,代表整个家庭设备
在while循环里面,根据用户输入来决定控制哪个设备的开关
package com.itheima.smartctlsys;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
// 定义数组,存放家用设备
HomeDevice[] devices = new HomeDevice[3]; // 多态写法
devices[0] = new Tv("小米电视", true);
devices[1] = new WashMachine("海尔洗衣机", false);
devices[2] = new Lamp("华为灯泡", true);
SmartControlSystem smartControlSystem = SmartControlSystem.getInstance();
while (true) {
// 打印所有设备的状态
smartControlSystem.printAllDeviceStatus(devices);
System.out.println("请选择您要控制的设备:");
// 接受键盘输入
Scanner sc = new Scanner(System.in);
String command = sc.next();
switch (command) {
case "1":
smartControlSystem.controlDevice(devices[0]);
break;
case "2":
smartControlSystem.controlDevice(devices[1]);
break;
case "3":
smartControlSystem.controlDevice(devices[2]);
break;
case "exit":
System.out.println("退出智能控制系统,欢迎再次使用!");
return;
default:
System.out.println("输入有误,请重新输入!");
}
}
}
}
四、代码结构
五、实现效果
六、参考视频
https://www.bilibili.com/video/BV1gb42177hm?spm_id_from=333.788.player.switch&vd_source=0467ab39cc5ec5940fee22a0e7797575&p=82