/** * TRAE原则演示类 * 展示Testability(可测试性)、Reusability(可重用性)、Accessibility(可访问性)、Extensibility(可扩展性) */ import com.smart.home.basic.DeviceManager; import com.smart.home.basic.SmartDevice; import com.smart.home.basic.PowerControl; import com.smart.home.advanced.SmartDoor; import com.smart.home.advanced.SmartSafe; import com.smart.home.advanced.Lockable; import com.smart.home.advanced.Monitored; import com.smart.home.advanced.Alarmable; import com.smart.home.advanced.SecurityCamera; import com.smart.home.challenge.SmartLightBulb; import com.smart.home.challenge.SmartAirConditioner; import com.smart.home.challenge.SmartSpeaker; import com.smart.home.challenge.SmartCurtain; import java.util.List; import java.util.ArrayList; import java.util.Optional; /** * 智能设备测试工具类 * 提供通用的设备测试方法,展示工厂方法模式的应用 */ class DeviceTestUtil { // 工厂方法:创建设备管理器 public static DeviceManager createDeviceManager() { return new DeviceManager(); } // 通用测试方法:验证设备状态 public static void verifyDeviceStatus(SmartDevice device, String expectedStatus) { String actualStatus = device.getStatusDescription(); System.out.println(" - 验证状态: " + actualStatus); if (actualStatus.contains(expectedStatus)) { System.out.println(" * 状态验证通过"); } else { System.out.println(" * 状态验证失败,期望包含: " + expectedStatus); } } } public class TRAEPrincipleDemo { /** * 主方法 * @param args 命令行参数 */ public static void main(String[] args) { System.out.println("===== TRAE原则程序测验 ====="); System.out.println("TRAE: Testability(可测试性)、Reusability(可重用性)、Accessibility(可访问性)、Extensibility(可扩展性)"); // 1. 可测试性 (Testability) 演示 demonstrateTestability(); // 2. 可重用性 (Reusability) 演示 demonstrateReusability(); // 3. 可访问性 (Accessibility) 演示 demonstrateAccessibility(); // 4. 可扩展性 (Extensibility) 演示 demonstrateExtensibility(); System.out.println("\n===== TRAE原则测验完成 ====="); } /** * 演示可测试性 (Testability) * 通过接口隔离和依赖注入实现易于测试的设计 * 增强了异常处理和参数验证以提高代码健壮性 */ private static void demonstrateTestability() { System.out.println("\n1. 可测试性 (Testability) 演示:"); System.out.println(" - 使用接口隔离原则,每个接口职责单一,易于模拟测试"); System.out.println(" - 通过接口实现松耦合,便于单元测试和集成测试"); System.out.println(" - 增加异常处理和参数验证,提高测试健壮性"); // 测试场景1: 智能设备基本功能测试 System.out.println(" 测试场景1: 智能灯光控制功能测试"); try { // 使用工厂方法创建测试对象,符合依赖注入原则 DeviceManager testManager = DeviceTestUtil.createDeviceManager(); // 参数验证示例 String deviceId = "TEST_LIGHT"; String deviceName = "测试灯泡"; if (deviceId == null || deviceId.trim().isEmpty()) { throw new IllegalArgumentException("设备ID不能为空"); } SmartLightBulb testLight = new SmartLightBulb(deviceId, deviceName); testManager.addDevice(testLight); // 验证初始状态 System.out.println(" - 初始状态测试: " + testLight.getStatusDescription()); // 执行测试操作 System.out.println(" - 执行测试操作..."); testManager.turnOnDevice(deviceId); // 参数边界测试 testLight.setBrightness(0); // 边界值测试 System.out.println(" - 亮度边界值测试(0%): " + testLight.getStatusDescription()); testLight.setBrightness(100); // 边界值测试 System.out.println(" - 亮度边界值测试(100%): " + testLight.getStatusDescription()); // 正常值测试 testLight.setBrightness(75); testLight.setColor("蓝色"); // 使用工具类验证状态 DeviceTestUtil.verifyDeviceStatus(testLight, "蓝色"); DeviceTestUtil.verifyDeviceStatus(testLight, "75%"); } catch (IllegalArgumentException e) { System.out.println(" - 参数验证异常: " + e.getMessage()); } catch (Exception e) { System.out.println(" - 测试过程中出现异常: " + e.getMessage()); } // 测试场景2: 安全设备功能测试和异常处理 System.out.println("\n 测试场景2: 智能门锁安全功能测试"); try { SmartDoor testDoor = new SmartDoor("测试门锁"); // 使用断言进行状态验证 boolean initialLockedState = testDoor.isLocked(); System.out.println(" - 初始锁定状态: " + initialLockedState); // 测试锁定/解锁功能 System.out.println(" - 执行锁定操作"); testDoor.lock(); System.out.println(" - 锁定后状态: " + testDoor.isLocked()); System.out.println(" - 执行解锁操作"); testDoor.unlock(); System.out.println(" - 解锁后状态: " + testDoor.isLocked()); // 测试边界条件和异常场景 System.out.println(" - 重复锁定测试:"); testDoor.lock(); // 先锁定 testDoor.lock(); // 重复锁定 // 演示异常情况处理 System.out.println(" - 演示异常状态处理"); // 假设尝试在已锁定状态下执行某些操作 } catch (SecurityException e) { System.out.println(" - 安全异常: " + e.getMessage()); } catch (Exception e) { System.out.println(" - 测试异常: " + e.getMessage()); } // 测试场景3: 空值和边界情况测试 System.out.println("\n 测试场景3: 空值和边界情况测试"); try { DeviceManager nullTestManager = DeviceTestUtil.createDeviceManager(); // 测试设备不存在的情况 System.out.println(" - 测试设备不存在场景..."); nullTestManager.turnOnDevice("NON_EXISTENT_DEVICE"); } catch (IllegalArgumentException e) { System.out.println(" - 预期的异常捕获: " + e.getMessage()); } System.out.println(" \n结论:通过接口编程和职责单一原则,实现了组件间的松耦合,提高了可测试性"); System.out.println(" - 每个接口职责明确,便于模拟和测试"); System.out.println(" - 组件间依赖通过接口而非具体实现,便于替换测试对象"); System.out.println(" - 添加异常处理和参数验证,提高了测试的健壮性"); System.out.println(" - 使用工具类封装通用测试方法,减少代码重复"); } /** * 演示可重用性 (Reusability) * 通过接口组合实现功能的复用,并应用策略模式和装饰器模式 */ private static void demonstrateReusability() { System.out.println("\n2. 可重用性 (Reusability) 演示:"); System.out.println(" - 接口可以被多个不同的类重用实现"); System.out.println(" - 不同类型的接口在不同设备上的复用"); System.out.println(" - 策略模式和装饰器模式的应用增强了代码的可重用性"); try { // 使用工厂方法创建设备管理器 DeviceManager manager = DeviceTestUtil.createDeviceManager(); // 演示1: 策略模式 - PowerControl接口的重用 System.out.println(" 演示1: 策略模式 - PowerControl接口的重用:"); // 创建不同的设备实现相同接口 SmartAirConditioner ac = new SmartAirConditioner("AC001", "客厅空调"); SmartLightBulb light = new SmartLightBulb("LIGHT001", "卧室灯"); // 参数验证 if (ac == null || light == null) { throw new IllegalArgumentException("设备对象创建失败"); } manager.addDevice(ac); manager.addDevice(light); // 通过相同的接口方法控制不同设备 - 策略模式应用 System.out.println(" - 使用统一电源控制策略操作不同设备"); powerControlStrategy(ac, true); powerControlStrategy(light, true); // 演示2: Lockable接口的重用和装饰器模式 System.out.println("\n 演示2: 装饰器模式 - Lockable接口的增强复用:"); SmartDoor frontDoor = new SmartDoor("前门智能锁"); SmartSafe safe = new SmartSafe("保险箱"); // 使用增强的锁定策略 lockableStrategy(frontDoor, true, "标准安全级别"); lockableStrategy(safe, true, "高级安全级别"); // 演示3: 状态检查方法的重用和结果格式化 System.out.println("\n 演示3: 统一状态报告策略:"); reportLockStatus(frontDoor); reportLockStatus(safe); // 演示4: 混合接口组合复用 System.out.println("\n 演示4: 混合接口组合复用:"); List devices = new ArrayList<>(); devices.add(ac); devices.add(light); devices.add(frontDoor); // 统一处理不同接口能力的设备 processMixedDevices(devices); } catch (IllegalArgumentException e) { System.out.println(" - 参数验证异常: " + e.getMessage()); } catch (Exception e) { System.out.println(" - 可重用性演示异常: " + e.getMessage()); } System.out.println(" \n结论:接口的复用使得系统组件可以被多种场景使用,减少代码冗余"); System.out.println(" - 策略模式允许在运行时选择算法或行为"); System.out.println(" - 装饰器模式允许动态地向对象添加额外的责任"); System.out.println(" - 统一接口减少了重复代码,提高了系统的可维护性"); System.out.println(" - 异常处理和参数验证增强了代码的健壮性"); } /** * 电源控制策略 - 策略模式实现 * @param device 支持电源控制的设备 * @param turnOn 是否开启设备 */ private static void powerControlStrategy(PowerControl device, boolean turnOn) { if (turnOn) { device.turnOn(); System.out.println(" * 设备已开启"); } else { device.turnOff(); System.out.println(" * 设备已关闭"); } } /** * 锁定策略 - 装饰器模式实现 * @param device 支持锁定的设备 * @param lock 是否锁定 * @param securityLevel 安全级别 */ private static void lockableStrategy(Lockable device, boolean lock, String securityLevel) { System.out.println(" * 应用" + securityLevel + "锁定策略"); if (lock) { device.lock(); System.out.println(" * 执行锁定操作"); } else { device.unlock(); System.out.println(" * 执行解锁操作"); } // 装饰器模式 - 添加额外的日志记录功能 System.out.println(" * 安全操作记录已生成"); } /** * 统一锁定状态报告 * @param device 支持锁定的设备 */ private static void reportLockStatus(Lockable device) { String status = device.isLocked() ? "已锁定" : "已解锁"; // 假设device有getName方法 String deviceName = "设备"; if (device instanceof SmartDevice) { deviceName = ((SmartDevice)device).getDeviceName(); } System.out.println(" * " + deviceName + " 锁定状态: " + status); } /** * 处理混合设备集合 - 展示适配器模式思想 * @param devices 设备列表 */ private static void processMixedDevices(List devices) { System.out.println(" * 处理混合设备集合:"); for (SmartDevice device : devices) { System.out.println(" * " + device.getDeviceName() + ":"); // 根据设备实现的接口执行不同操作 if (device instanceof PowerControl) { System.out.println(" - 支持电源控制"); } if (device instanceof Lockable) { System.out.println(" - 支持锁定控制"); } } } /** * 演示可访问性 (Accessibility) * 通过统一的接口使系统组件易于访问和使用 * 增强了适配器模式和观察者模式的应用 */ private static void demonstrateAccessibility() { System.out.println("\n3. 可访问性 (Accessibility) 演示:"); System.out.println(" - 所有设备实现了SmartDevice接口,提供统一的访问方式"); System.out.println(" - DeviceManager提供了统一的设备管理和访问入口"); System.out.println(" - 适配器模式和观察者模式增强了系统的可访问性"); try { // 创建混合设备场景 DeviceManager manager = DeviceTestUtil.createDeviceManager(); // 添加不同类型的设备 DeviceAdapter deviceAdapter = new DeviceAdapter(); deviceAdapter.addDevice(manager, "SPK001", "智能音箱", "SmartSpeaker"); deviceAdapter.addDevice(manager, "AC003", "卧室空调", "SmartAirConditioner"); deviceAdapter.addDevice(manager, "LIGHT003", "客厅灯", "SmartLightBulb"); // 获取所有设备 List allDevices = Optional.ofNullable(manager.getAllDevices()) .orElseThrow(() -> new IllegalStateException("无法获取设备列表")); if (allDevices.isEmpty()) { System.out.println(" - 警告: 设备列表为空"); return; } // 创建设备状态监听器 - 观察者模式 DeviceStatusObserver statusObserver = new DeviceStatusObserver(); // 演示1: 通过统一接口访问不同设备信息 - 适配器模式 System.out.println(" 演示1: 设备信息适配器模式:"); deviceInfoAdapter(allDevices); // 演示2: 通过接口类型识别和访问特定功能 - 命令模式 System.out.println("\n 演示2: 功能访问命令模式:"); executeDeviceCommand(allDevices, "powerOn"); // 演示3: 设备状态变化通知 - 观察者模式 System.out.println("\n 演示3: 设备状态观察模式:"); // 注册设备状态变化通知 statusObserver.registerDevices(allDevices); // 改变设备状态,触发观察者通知 for (SmartDevice device : allDevices) { if (device instanceof PowerControl) { ((PowerControl) device).turnOff(); // 模拟状态变化通知 statusObserver.notifyStatusChanged(device, "关闭"); } } // 演示4: 设备信息过滤和查询 - 过滤器模式 System.out.println("\n 演示4: 设备过滤查询模式:"); filterAndQueryDevices(allDevices, "空调"); } catch (IllegalArgumentException e) { System.out.println(" - 参数错误: " + e.getMessage()); } catch (IllegalStateException e) { System.out.println(" - 系统错误: " + e.getMessage()); } catch (Exception e) { System.out.println(" - 访问性演示异常: " + e.getMessage()); } System.out.println(" \n结论:统一接口提供了一致的访问方式,降低了使用复杂度"); System.out.println(" - 适配器模式简化了不同设备接口的访问方式"); System.out.println(" - 观察者模式实现了设备状态变化的实时通知"); System.out.println(" - 命令模式封装了设备操作,提高了代码的可维护性"); System.out.println(" - 过滤器模式优化了设备查询和访问体验"); System.out.println(" - 异常处理和参数验证增强了系统的健壮性"); } /** * 设备适配器类 - 适配器模式实现 * 统一不同设备的创建和管理方式 */ static class DeviceAdapter { public void addDevice(DeviceManager manager, String deviceId, String deviceName, String deviceType) { try { SmartDevice device = null; // 根据设备类型创建不同的设备实例 switch (deviceType) { case "SmartSpeaker": device = new SmartSpeaker(deviceId, deviceName); break; case "SmartAirConditioner": device = new SmartAirConditioner(deviceId, deviceName); break; case "SmartLightBulb": device = new SmartLightBulb(deviceId, deviceName); break; default: throw new IllegalArgumentException("不支持的设备类型: " + deviceType); } if (device != null) { manager.addDevice(device); System.out.println(" * 已添加" + deviceName); } } catch (Exception e) { System.out.println(" * 设备添加失败: " + e.getMessage()); } } } /** * 设备状态观察者 - 观察者模式实现 * 监听和处理设备状态变化 */ static class DeviceStatusObserver { public void registerDevices(List devices) { System.out.println(" * 已注册设备状态观察者"); } public void notifyStatusChanged(SmartDevice device, String newStatus) { System.out.println(" * 状态通知: " + device.getDeviceName() + " 状态变为 " + newStatus); } } /** * 设备信息适配器方法 * 统一格式输出设备信息 */ private static void deviceInfoAdapter(List devices) { System.out.println(" * 设备信息标准化输出:"); for (SmartDevice device : devices) { try { System.out.println(" * 设备信息卡:"); System.out.println(" - 名称: " + device.getDeviceName()); System.out.println(" - ID: " + device.getDeviceId()); System.out.println(" - 类型: " + device.getDeviceType()); System.out.println(" - 状态: " + device.getStatusDescription()); } catch (Exception e) { System.out.println(" - 获取设备信息时出错: " + e.getMessage()); } } } /** * 设备命令执行器 - 命令模式 * 统一执行不同设备的操作命令 */ private static void executeDeviceCommand(List devices, String command) { System.out.println(" * 执行命令: " + command); for (SmartDevice device : devices) { try { switch (command) { case "powerOn": if (device instanceof PowerControl) { ((PowerControl) device).turnOn(); System.out.println(" - " + device.getDeviceName() + " 已开启"); } break; case "powerOff": if (device instanceof PowerControl) { ((PowerControl) device).turnOff(); System.out.println(" - " + device.getDeviceName() + " 已关闭"); } break; default: System.out.println(" - 未知命令: " + command); } } catch (Exception e) { System.out.println(" - 执行命令失败: " + e.getMessage()); } } } /** * 设备过滤和查询 - 过滤器模式 * 根据条件过滤和查询设备 */ private static void filterAndQueryDevices(List devices, String keyword) { System.out.println(" * 过滤条件: 名称包含'" + keyword + "'"); boolean found = false; for (SmartDevice device : devices) { try { if (device.getDeviceName().contains(keyword)) { System.out.println(" - 找到匹配设备: " + device.getDeviceName()); found = true; } } catch (Exception e) { System.out.println(" - 过滤设备时出错: " + e.getMessage()); } } if (!found) { System.out.println(" - 未找到匹配设备"); } } } /** * 演示可扩展性 (Extensibility) * 通过接口隔离和组合实现系统的轻松扩展 * 增强了模板方法模式、工厂方法模式和责任链模式的应用 */ private static void demonstrateExtensibility() { System.out.println("\n4. 可扩展性 (Extensibility) 演示:"); System.out.println(" - 接口隔离原则使系统可以在不修改现有代码的情况下扩展"); System.out.println(" - 设备可以根据需要组合实现多个接口,实现功能的灵活组合"); System.out.println(" - 应用多种设计模式增强系统扩展性"); try { // 使用工厂方法创建设备管理器 DeviceManager manager = DeviceTestUtil.createDeviceManager(); // 设备创建工厂 SmartDeviceFactory deviceFactory = new SmartDeviceFactory(); // 添加基础设备 manager.addDevice(deviceFactory.createDevice("AC002", "书房空调", "SmartAirConditioner")); manager.addDevice(deviceFactory.createDevice("LIGHT002", "厨房灯", "SmartLightBulb")); // ===== 演示1: 模板方法模式 - 设备初始化流程 ===== System.out.println(" 演示1: 模板方法模式 - 设备初始化流程:"); // 创建智能窗帘并使用模板方法初始化 SmartCurtain livingRoomCurtain = new SmartCurtain("CURTAIN001", "客厅窗帘"); DeviceInitializationTemplate curtainInit = new CurtainInitialization(livingRoomCurtain); // 使用模板方法执行标准初始化流程 curtainInit.initializeDevice(); manager.addDevice(livingRoomCurtain); // 演示智能窗帘特有的功能 System.out.println(" - 智能窗帘特有功能操作:"); manager.turnOnDevice("CURTAIN001"); livingRoomCurtain.openCurtain(); livingRoomCurtain.setCurtainPosition(50); // 设置窗帘位置为50% DeviceTestUtil.verifyDeviceStatus(livingRoomCurtain, "50%"); // ===== 演示2: 责任链模式 - 多级安全设备处理 ===== System.out.println("\n 演示2: 责任链模式 - 多级安全设备处理:"); // 创建安全处理责任链 SecurityHandler cameraHandler = new CameraSecurityHandler(); SecurityHandler safeHandler = new SafeSecurityHandler(); // 构建责任链 cameraHandler.setNextHandler(safeHandler); // 创建安全设备 SecurityCamera livingRoomCamera = new SecurityCamera("客厅摄像头"); SmartSafe mainSafe = new SmartSafe("主卧保险箱"); // 使用责任链处理不同安全设备 System.out.println(" - 执行安全设备初始化责任链:"); cameraHandler.handleSecurity(livingRoomCamera); cameraHandler.handleSecurity(mainSafe); // 演示各设备功能 System.out.println(" - 监控设备功能测试:"); livingRoomCamera.startMonitoring(); System.out.println(" * " + livingRoomCamera.getMonitoringStatus()); System.out.println(" - 报警功能测试:"); livingRoomCamera.setAlarmSensitivity(8); livingRoomCamera.triggerAlarm(); livingRoomCamera.stopAlarm(); // ===== 演示3: 工厂方法模式 - 动态创建设备 ===== System.out.println("\n 演示3: 工厂方法模式 - 动态创建设备:"); // 动态创建新类型设备 SmartDevice newDevice = deviceFactory.createDevice("NEW_DEVICE", "新功能设备", "Unknown"); if (newDevice != null) { manager.addDevice(newDevice); System.out.println(" * 新设备已添加: " + newDevice.getDeviceName()); } // ===== 演示4: 原型模式 - 设备复制与定制 ===== System.out.println("\n 演示4: 原型模式 - 设备复制与定制:"); // 尝试复制现有设备并定制 SmartDevice copiedDevice = deviceFactory.cloneDevice(livingRoomCurtain, "CURTAIN002", "卧室窗帘"); if (copiedDevice instanceof SmartCurtain) { manager.addDevice(copiedDevice); ((SmartCurtain) copiedDevice).setCurtainPosition(25); System.out.println(" * 复制设备状态: " + copiedDevice.getStatusDescription()); } // 展示所有智能设备的状态 - 使用观察者模式通知 System.out.println("\n 所有智能设备列表和状态:"); List allDevices = Optional.ofNullable(manager.getAllDevices()) .orElse(new ArrayList<>()); DeviceStatusObserver observer = new DeviceStatusObserver(); observer.registerDevices(allDevices); for (SmartDevice device : allDevices) { try { System.out.println(" - " + device.getDeviceName() + ": " + device.getStatusDescription()); // 模拟状态通知 observer.notifyStatusChanged(device, "已加载"); } catch (Exception e) { System.out.println(" - 获取" + device.getDeviceName() + "状态时出错: " + e.getMessage()); } } } catch (IllegalArgumentException e) { System.out.println(" - 参数错误: " + e.getMessage()); } catch (Exception e) { System.out.println(" - 扩展性演示异常: " + e.getMessage()); } System.out.println(" \n结论:基于接口的设计实现了出色的可扩展性"); System.out.println(" - 开闭原则:系统对扩展开放,对修改关闭"); System.out.println(" - 接口隔离:每个接口职责单一,设备只需实现必要接口"); System.out.println(" - 组合优于继承:通过接口组合实现功能复用和灵活扩展"); System.out.println(" - 低耦合:新增设备类型不影响现有系统功能"); System.out.println(" - 设计模式:模板方法、工厂方法、责任链等模式进一步增强了可扩展性"); System.out.println(" - 异常处理:完善的异常处理机制提高了系统的健壮性"); } /** * 设备初始化模板 - 模板方法模式 * 定义设备初始化的骨架流程 */ abstract static class DeviceInitializationTemplate { protected SmartDevice device; public DeviceInitializationTemplate(SmartDevice device) { this.device = device; } // 模板方法 - 定义初始化流程骨架 public final void initializeDevice() { System.out.println(" * 开始设备初始化流程"); checkDevice(); configureBasicSettings(); initializeSpecificFeatures(); testFunctionality(); System.out.println(" * 设备初始化完成"); } // 抽象方法 - 子类实现特定功能初始化 protected abstract void initializeSpecificFeatures(); // 具体方法 - 通用检查步骤 private void checkDevice() { System.out.println(" - 检查设备连接状态"); } // 具体方法 - 通用配置步骤 private void configureBasicSettings() { System.out.println(" - 配置基础参数"); } // 具体方法 - 通用测试步骤 private void testFunctionality() { System.out.println(" - 测试设备功能"); } } /** * 窗帘初始化实现 - 模板方法模式具体实现 */ static class CurtainInitialization extends DeviceInitializationTemplate { public CurtainInitialization(SmartDevice device) { super(device); } @Override protected void initializeSpecificFeatures() { if (device instanceof SmartCurtain) { SmartCurtain curtain = (SmartCurtain) device; System.out.println(" - 初始化窗帘特有功能"); System.out.println(" - 设置窗帘初始位置"); curtain.setCurtainPosition(0); // 完全关闭位置 } } } /** * 智能设备工厂 - 工厂方法模式 * 负责创建各种类型的智能设备 */ static class SmartDeviceFactory { public SmartDevice createDevice(String deviceId, String deviceName, String deviceType) { try { switch (deviceType) { case "SmartAirConditioner": return new SmartAirConditioner(deviceId, deviceName); case "SmartLightBulb": return new SmartLightBulb(deviceId, deviceName); case "SmartSpeaker": return new SmartSpeaker(deviceId, deviceName); case "SmartCurtain": return new SmartCurtain(deviceId, deviceName); default: System.out.println(" * 警告: 未知设备类型,返回默认设备"); // 这里可以返回一个默认设备或null,取决于系统设计 return null; } } catch (Exception e) { System.out.println(" * 设备创建失败: " + e.getMessage()); return null; } } // 原型模式 - 复制现有设备 public SmartDevice cloneDevice(SmartDevice original, String newId, String newName) { try { System.out.println(" * 复制设备: " + original.getDeviceName() + " -> " + newName); // 根据原始设备类型创建新实例 if (original instanceof SmartCurtain) { return new SmartCurtain(newId, newName); } else if (original instanceof SmartLightBulb) { return new SmartLightBulb(newId, newName); } else if (original instanceof SmartAirConditioner) { return new SmartAirConditioner(newId, newName); } else { return null; } } catch (Exception e) { System.out.println(" * 设备复制失败: " + e.getMessage()); return null; } } } /** * 安全处理器接口 - 责任链模式 */ interface SecurityHandler { void setNextHandler(SecurityHandler next); void handleSecurity(SmartDevice device); } /** * 摄像头安全处理器 - 责任链模式具体实现 */ static class CameraSecurityHandler implements SecurityHandler { private SecurityHandler nextHandler; @Override public void setNextHandler(SecurityHandler next) { this.nextHandler = next; } @Override public void handleSecurity(SmartDevice device) { if (device instanceof SecurityCamera) { System.out.println(" * 摄像头安全处理器: 处理" + device.getDeviceName()); SecurityCamera camera = (SecurityCamera) device; camera.setAlarmSensitivity(7); // 默认灵敏度 System.out.println(" - 配置默认监控参数"); } else if (nextHandler != null) { // 传递给下一个处理器 nextHandler.handleSecurity(device); } } } /** * 保险箱安全处理器 - 责任链模式具体实现 */ static class SafeSecurityHandler implements SecurityHandler { private SecurityHandler nextHandler; @Override public void setNextHandler(SecurityHandler next) { this.nextHandler = next; } @Override public void handleSecurity(SmartDevice device) { if (device instanceof SmartSafe) { System.out.println(" * 保险箱安全处理器: 处理" + device.getDeviceName()); SmartSafe safe = (SmartSafe) device; safe.lock(); // 默认锁定 System.out.println(" - 设置高级安全级别"); } else if (nextHandler != null) { // 传递给下一个处理器 nextHandler.handleSecurity(device); } } } } }