基于Java的家居设备控制系统设计与实现

目录

  1. 项目目标
  2. 设计思路
  3. 系统架构
  4. 核心实现
  5. 运行演示
  6. 存在问题与优化
  7. 总结

项目目标

实现四种家居设备(灯/空调/电视/洗衣机)的智能控制系统,要求:

  • 统一管理设备开关状态
  • 支持状态反转操作
  • 提供简洁的控制接口
  • 具备扩展性支持新设备接入

设计思路

面向对象设计原则

  1. 抽象原则:通过接口定义通用行为
  2. 继承机制:建立家电父类统一管理基础属性
  3. 多态应用:使用父类数组管理子类对象
  4. 单例模式:控制系统唯一入口

类关系图

«interface»
Switch
+press()
JD
-String name
-boolean status
+press()
Lamp
TV
Air
WashMachine
SmartControl
-static instance
-SmartControl(JD)
+getInstance(JD)

系统架构

1. 接口层

public interface Switch {
    void press();
}

2. 基础父类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class JD implements Switch {
    private String name;
    private boolean status;

    @Override
    public void press() {
        status = !status;
    }
}

3. 设备子类(示例)

// 灯具类
public class Lamp extends JD {
    public Lamp(String name, boolean status) {
        super(name, status);
    }
}

// 空调类
public class Air extends JD {
    public Air(String name, boolean status) {
        super(name, status);
    }
}

4. 控制系统

public class SmartControl {
    private static SmartControl instance;
    
    private SmartControl(JD jd) {
        showStatus(jd);
        jd.press();
        showStatus(jd);
    }

    public static SmartControl getInstance(JD jd) {
        if (instance == null) {
            instance = new SmartControl(jd);
        }
        return instance;
    }

    private void showStatus(JD jd) {
        System.out.println(jd.getName() + "状态: " 
            + (jd.isStatus() ? "运行中" : "已关闭"));
    }
}

核心实现

设备初始化

        JD[] jds = new JD[4];
        jds[0] = new TV("电视",true);
        jds[1] = new WashMachine("洗衣机",true);
        jds[2] = new Lamp("吊灯",true);
        jds[3] = new Air("空调",true);

控制逻辑

        while (true){
            System.out.println("请选择设备:");
            System.out.println("1.电视 2.洗衣机 3.灯具 4.空调 0.退出");
            Scanner sc = new Scanner(System.in);
            int index = sc.nextInt();
            switch (index){
                case 1:
                    SmartControl smartControl = SmartControl.getInstance(jds[0]);
                    break;
                case 2:
                    SmartControl smartControl2 = SmartControl.getInstance(jds[1]);
                    break;
                case 3:
                    SmartControl smartControl3 = SmartControl.getInstance(jds[2]);
                    break;
                case 4:
                    SmartControl smartControl4 = SmartControl.getInstance(jds[3]);
                    break;
                default:
                    System.out.println("输入错误");
            }
        }

运行演示

电视开关状态:开着
洗衣机开关状态:开着
吊灯开关状态:开着
空调开关状态:开着
请选择设备:
1.电视 2.洗衣机 3.灯具 4.空调 0.退出
2
请开始你的操作-----
洗衣机状态目前是:开着
洗衣机状态变为是:关着
请选择设备:
1.电视 2.洗衣机 3.灯具 4.空调 0.退出
2
请选择设备:
1.电视 2.洗衣机 3.灯具 4.空调 0.退出

存在问题与优化

现存问题

  1. 单例模式实现缺陷

    • 当前实现只能操作首次选择的设备
    • 解决方法:移除单例模式或重构控制逻辑
  2. 设备初始化硬编码

    • 建议改用配置文件或数据库存储
  3. 缺少状态持久化

    • 增加文件存储功能保存设备状态

优化方案

  1. 改进单例模式
// 改为无状态控制中心
public class SmartControl {
    private static final SmartControl INSTANCE = new SmartControl();
    
    private SmartControl() {}
    
    public static SmartControl getInstance() {
        return INSTANCE;
    }
    
    public void controlDevice(JD device) {
        device.press();
        System.out.println(device.getName() + "状态切换完成");
    }
}
  1. 增加设备管理类
public class DeviceManager {
    private List<JD> devices = new ArrayList<>();
    
    public void addDevice(JD device) {
        devices.add(device);
    }
    
    public JD getDevice(int index) {
        return devices.get(index);
    }
}

总结

本系统通过以下技术实现了家居设备控制:

  • 接口定义统一行为规范
  • 继承实现代码复用
  • 多态提高扩展性
  • Lombok简化开发

你可能感兴趣的:(java,java,开发语言)