这是一个基于Java面向对象编程的智能家居控制系统,通过多态、继承和接口等设计模式,模拟了家庭中各类电器的开关控制功能。
系统架构设计
1. 核心类结构
1.1 抽象层设计
Switch接口 - 定义了设备的基本操作规范
java
package demo;
public interface Switch {
void press(); // 开关操作
}
1.2 基类设计
JD类(家电基类) - 所有家电的抽象父类
java
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)
java
public class TV extends JD{
public TV(String name,boolean status){
super(name,status);
}
}
2.2 洗衣机类 (WashMachine)
java
public class WashMachine extends JD{
public WashMachine(String name, boolean status) {
super(name, status);
}
}
2.3 吊灯类 (Lamp)
java
public class Lamp extends JD{
public Lamp(String name,boolean status){
super(name,status);
}
}
2.4 窗户类 (Window)
java
public class Window extends JD{
public Window(String name, boolean status) {
super(name, status);
}
}
2.5 空调类 (Air)
java
public class Air extends JD {
public Air(String name, boolean status) {
super(name, status);
}
}
3. 控制系统核心
SmartHomeControl类 - 智能家居控制中心
java
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类 - 系统入口和用户交互
java
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基类即可:
java
public class NewDevice extends JD {
public NewDevice(String name, boolean status) {
super(name, status);
}
// 可添加设备特有方法
}
控制功能扩展
可在SmartHomeControl类中添加新控制方法,如:
java
public void batchControl(JD[] jds, boolean targetStatus) {
for(JD jd : jds) {
if(jd.isStatus() != targetStatus) {
jd.press();
}
}
}
亮点
-
清晰的类层次结构: 合理的继承体系
-
良好的封装性: 属性私有,提供公共访问方法
-
灵活的多态应用: 通过接口和父类引用实现统一管理
-
用户友好的交互界面: 简单明了的控制台交互
改进
-
添加异常处理机制
-
实现设备分组控制功能
-
添加定时控制功能
-
引入配置文件,实现设备信息的动态加载
-
添加日志记录功能,记录设备操作历史
总结
这个智能家居控制系统是一个优秀的面向对象编程实践案例,展示了Java核心特性在实际项目中的应用。通过合理的类设计、多态的应用和清晰的程序结构,实现了可扩展、易维护的家电控制系统框架。