当前位置: 首页 > news >正文

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

文章目录

  • 一、需求
  • 二、业务分析
  • 三、具体实现
    • 创建一个功能接口,实现设备的开关
    • 创建一个家电类,作为功能接口的实现类,定义名字和状态
    • 分别创建电视机、洗衣机、电灯的类,继承家电类
      • 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

相关文章:

  • vue3怎么和大模型交互?
  • spring security学习入门指引
  • Spring框架详解(IOC容器-上)
  • 【PyTorch教学】pytorch 基本语法
  • WebForms HTML:深入理解与高效运用
  • 并发编程面试题一
  • 《深入剖析:鸿蒙开发工具模拟器在人工智能应用模拟测试中的特性与局限》
  • 【CXX】6.8 Vec<T> — rust::Vec<T>
  • 房屋交易平台设计与实现(代码+数据库+LW)
  • ECA注意力机制改进思路
  • 第三章-PHP流程控制语句
  • Linux 运行级别
  • 带宽管理配置实验
  • 【Azure 架构师学习笔记】- Azure Databricks (21) --费用相关
  • 进程管理:前后台切换
  • 3U VPX 国产化板卡FT6678+V7 690T
  • 格式化输出备忘
  • css的显示模式
  • fs的proxy_media模式失效
  • 网络安全 与 加密算法
  • 《风林火山》千呼万唤始出来,戛纳首映后口碑崩盘?
  • 林诗栋/蒯曼混双取胜,国乒赢得多哈世乒赛开门红
  • 篮球培训机构东方启明星被指停摆,家长称已登记未退费用超百万
  • 新版城市规划体检评估解读:把城市安全韧性摆在更加突出位置
  • 一周文化讲座|“我的生命不过是温柔的疯狂”
  • 问责!美国海军对“杜鲁门”号航母一系列事故展开调查