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

接口异常数组基础题

题目描述

设想你正在构建一个智能家居控制系统。这个系统可以连接多种不同类型的智能设备,如智能灯泡、智能空调和智能门锁。每种设备都有其独特的功能,不过它们也有一些通用的操作,像开启、关闭和获取设备状态等。系统需要提供一个方法来控制多个设备的开关,同时还要有一个方法依据用户输入的设备类型来创建对应的设备对象。

详细要求

  1. 定义接口:创建一个 SmartDevice 接口,其中包含开启设备、关闭设备以及获取设备状态的抽象方法。
  2. 实现具体设备类:创建 SmartBulb(智能灯泡)、SmartAirConditioner(智能空调)和 SmartLock(智能门锁)类,让它们实现 SmartDevice 接口。
  3. 多态的实现
    1. 方法形参:创建一个 controlDevices 方法,该方法接收一个 SmartDevice 数组作为参数,对数组里的所有设备执行开启或关闭操作。
    2. 方法返回值:创建一个 createDevice 方法,该方法依据用户输入的设备类型返回对应的 SmartDevice 对象。
  4. 异常处理:在 createDevice 方法中,若用户输入的设备类型不被支持,要抛出一个自定义异常 MyException

SmartDevice类

public interface SmartDevice {
    boolean open();
    boolean close();
    void condition();
}

SmartBlub类

public class SmartBulb implements SmartDevice{

    private boolean isOn;

    @Override
    public boolean open() {
        isOn = true;
        return isOn;
    }

    @Override
    public boolean close() {
        isOn = false;
        return isOn;
    }

    @Override
    public void condition() {
        if (isOn){
            System.out.println("智能灯泡已开启");
        }else {
            System.out.println("智能灯泡已关闭");
        }
    }
}

SmartAirCondition类

public class SmartAirConditioner implements SmartDevice{

    private boolean isOn;

    @Override
    public boolean open() {
        isOn = true;
        return isOn;
    }

    @Override
    public boolean close() {
        isOn = false;
        return isOn;
    }

    @Override
    public void condition() {
        if (isOn){
            System.out.println("智能空调已开启");
        }else {
            System.out.println("智能空调已关闭");
        }
    }
}

SmartLock类

public class SmartLock implements SmartDevice{

    private boolean isOn;

    @Override
    public boolean open() {
        isOn = true;
        return isOn;
    }

    @Override
    public boolean close() {
        isOn = false;
        return isOn;
    }

    @Override
    public void condition() {
        if (isOn){
            System.out.println("智能门锁已开启");
        }else {
            System.out.println("智能门锁已关闭");
        }
    }
}

ControlDevice类

public class ControlDevice {

    public void ControlDevice(SmartDevice [] smartDevices){
        for(SmartDevice smartDevice : smartDevices){
            smartDevice.open();
            smartDevice.condition();
            smartDevice.close();
            smartDevice.condition();
            System.out.println();
        }
    }

    public SmartDevice createDevice(String name) throws MyException{
        switch (name){
            case "智能灯泡":
                return new SmartBulb();
            case "智能空调":
                return new SmartAirConditioner();
            case "智能门锁":
                return new SmartLock();
            default:
                throw new MyException("不支持的设备类型: " + name);
        }
    }
}

MyException自定义异常类

public class MyException extends RuntimeException {

    public MyException(String message) {
        super(message);
    }

}

Test

public class Test {
    public static void main(String[] args) {

        try {
            ControlDevice controlDevice = new ControlDevice();

            SmartBulb bulb =(SmartBulb) controlDevice.createDevice("智能灯泡");
            SmartAirConditioner airConditioner =(SmartAirConditioner) controlDevice.createDevice("智能空调");
            SmartLock lock =(SmartLock) controlDevice.createDevice("智能门锁");

            SmartDevice [] smartDevice = {bulb,airConditioner,lock};
            controlDevice.ControlDevice(smartDevice);

            controlDevice.createDevice("智能冰箱");
        } catch (MyException e) {
            e.printStackTrace();
            System.out.println("该家具不存在!");
        }finally {
            System.out.println("程序运行完毕!");
        }


    }
}

输出结果:

相关文章:

  • Linux 系统 SVN 源码安装与配置全流程指南
  • python中的in关键字查找的时间复杂度
  • 神经网络基础(NN)
  • Multi-class N-pair Loss论文理解
  • acwing.蛇形矩阵
  • java+postgresql+swagger-多表关联insert操作(六)
  • golang 计时器内存泄露问题 与 pprof 性能分析工具
  • VTK知识学习(51)- 交互与Widget(二)
  • 无人机双频技术及底层应用分析!
  • C++学习之三次握手四次挥手
  • 从零设计React-Markdown组件的实现方案
  • MySQL数据库经典面试题解析
  • vue3实战一、管理系统之实战立项
  • Java的Selenium的特殊元素操作与定位之验证码
  • 实用数字图像处理与分析系统
  • 【STM32】综合练习——智能风扇系统
  • 进程内存分布--之showmap呈现memory-layout.cpp内存分布
  • Java设计模式之抽象工厂模式:从入门到架构级实践
  • 经典频域分析法(Bode图、Nyquist判据) —— 理论、案例与交互式 GUI 实现
  • Java 面试系列:Java 中的运算符和流程控制 + 面试题
  • 历史缝隙里的人︱觑功名如画饼:盛世“做题家”的攀爬与坠落
  • 海南保亭警方通报“两飞车党紧追女童”:两名初中生认错道歉
  • 以色列总理:以哈谈判内容包括“结束战争的框架”
  • 英国警方再逮捕一名涉嫌参与首相住宅纵火案嫌疑人
  • 辽宁援疆前指总指挥王敬华已任新疆塔城地委副书记
  • 女排奥运冠军宋妮娜:青少年保持身心健康才能走得更远