目录

java实现智能家居控制系统入门版

java实现智能家居控制系统——入门版


用户通过智能家居控制系统来控制家用设备(电视机、洗衣机、电灯)的开关。

目标:面向对象编程,实现智能家居控制系统

角色:设备(电视机、洗衣机、电灯)

功能:开和关

谁来控制设备:智能家居控制系统

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;
    }
}
package com.itheima.smartctlsys;

// 电视
public class Tv extends HomeDevice {
    // 定义有参构造器
    public Tv(String name, boolean status) {
        super(name, status);    // 调父类的有参构造器
    }
}
package com.itheima.smartctlsys;

// 定义洗衣机类
public class WashMachine extends HomeDevice {
    // 定义有参构造器
    public WashMachine(String name, boolean status) {
        super(name, status);    // 调父类的有参构造器
    }
}
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://i-blog.csdnimg.cn/direct/53ed45c28ca14072a7924cf774626c4d.png

https://i-blog.csdnimg.cn/direct/808f24bec8244f6e8bb76c2479453294.png