这是一个基于Java面向对象编程的智能家居控制系统,通过多态、继承和接口等设计模式,模拟了家庭中各类电器的开关控制功能。
系统架构设计
1. 核心类结构
1.1 抽象层设计
Switch接口- 定义了设备的基本操作规范
package demo; public interface Switch { void press(); // 开关操作 }1.2 基类设计
JD类(家电基类)- 所有家电的抽象父类
package demo; //家电 public class JD implements Switch{ private String name; //状态:关、开 private boolean status; // 显式添加无参构造函数 public JD() { } public JD(String name, boolean status){ this.name = name; this.status = status; } // getter 和 setter 方法... public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isStatus() { return status; } public void setStatus(boolean status) { this.status = status; } public void press(){ status=!status; // 切换开关状态 } }2. 具体设备类
系统支持五种家电设备,都继承自JD基类:
2.1 电视类 (TV)
public class TV extends JD{ public TV(String name,boolean status){ super(name,status); } }2.2 洗衣机类 (WashMachine)
public class WashMachine extends JD{ public WashMachine(String name, boolean status) { super(name, status); } }2.3 吊灯类 (Lamp)
public class Lamp extends JD{ public Lamp(String name,boolean status){ super(name,status); } }2.4 窗户类 (Window)
public class Window extends JD{ public Window(String name, boolean status) { super(name, status); } }2.5 空调类 (Air)
public class Air extends JD { public Air(String name, boolean status) { super(name, status); } }3. 控制系统核心
SmartHomeControl类- 智能家居控制中心
package demo; //智能控制系统类 public class SmartHomeControl { //多态应用:接收父类JD引用,实际传入子类对象 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 printAllJD(JD[] jds) { System.out.println("==================所有家电信息如下===================="); for (int i = 0; i < jds.length; i++) { JD jd = jds[i]; System.out.println((i+1)+","+jd.getName() + " 目前状态是:" + (jd.isStatus() ? "开着" : "关着")); } } }4. 测试程序
Test类- 系统入口和用户交互
package demo; import java.util.Scanner; public class Test { static void main(String[] args) { // 初始化设备数组 JD[] jds=new JD[5]; jds[0]=new TV("小米电视", true); jds[1]=new WashMachine("美的洗衣机", false); jds[2]=new Lamp("欧莱雅吊灯", false); jds[3]=new Window("落地窗", false); jds[4]=new Air("美的空调", false); // 创建智能控制对象 SmartHomeControl shc=new SmartHomeControl(); // 用户交互界面 while (true) { shc.printAllJD(jds); System.out.println("b.选择设备进行操作:"); Scanner sc=new Scanner(System.in); String choose=sc.next(); switch (choose){ case "1": shc.control(jds[0]); break; case "2": shc.control(jds[1]); break; case "3": shc.control(jds[2]); break; case "4": shc.control(jds[3]); break; case "5": shc.control(jds[4]); break; case"exit": System.out.println("退出系统!"); return; default: System.out.println("输入错误!请重新选择:"); } } } }结果展示
设计模式应用
1. 多态的应用
接口多态: 所有家电都实现了
Switch接口继承多态: 具体设备类继承
JD基类,可以使用父类引用操作子类对象方法重写:
press()方法在子类中可以有不同实现
2. 单一职责原则
JD类负责维护家电基本属性具体设备类只负责自身特有功能
SmartHomeControl类专注于控制逻辑
3. 开闭原则
系统对扩展开放(可以添加新设备),对修改关闭(无需修改现有代码)
系统运行流程
初始化阶段: 创建五个家电对象并放入数组
展示阶段: 显示所有设备状态信息
交互阶段:
用户输入设备编号(1-5)
调用相应设备的
press()方法切换状态显示操作结果
退出阶段: 输入"exit"退出系统
扩展性分析
易于添加新设备
只需新建类继承JD基类即可:
public class NewDevice extends JD { public NewDevice(String name, boolean status) { super(name, status); } // 可添加设备特有方法 }控制功能扩展
可在SmartHomeControl类中添加新控制方法,如:
public void batchControl(JD[] jds, boolean targetStatus) { for(JD jd : jds) { if(jd.isStatus() != targetStatus) { jd.press(); } } }亮点
清晰的类层次结构: 合理的继承体系
良好的封装性: 属性私有,提供公共访问方法
灵活的多态应用: 通过接口和父类引用实现统一管理
用户友好的交互界面: 简单明了的控制台交互
改进
添加异常处理机制
实现设备分组控制功能
添加定时控制功能
引入配置文件,实现设备信息的动态加载
添加日志记录功能,记录设备操作历史
总结
这个智能家居控制系统是一个优秀的面向对象编程实践案例,展示了Java核心特性在实际项目中的应用。通过合理的类设计、多态的应用和清晰的程序结构,实现了可扩展、易维护的家电控制系统框架。