11.14日学习笔记

news/2025/11/14 22:26:45/文章来源:https://www.cnblogs.com/wenbushi-dream/p/19223677

类图设计
text
+------------------------+
| Computer |
+------------------------+
| -memory: Memory |
| -cpu: CPU |
| -hardDisk: HardDisk |
| -os: OS |
+------------------------+
| +powerOn(): boolean |
| +powerOff(): boolean |
| +getStatus(): String |
+------------------------+
|
| 使用
|
+------------------------+
| Mainframe |
+------------------------+
| -computer: Computer |
+------------------------+
| +on(): boolean |
| +off(): boolean |
| +getSystemInfo(): String|
+------------------------+

|
+------------------------+
| Client |
+------------------------+

+------------------------+ +------------------------+
| Memory | | CPU |
+------------------------+ +------------------------+
| +check(): boolean | | +run(): boolean |
| +getSize(): long | | +getFrequency(): double|
| +getStatus(): String | | +getStatus(): String |
+------------------------+ +------------------------+

+------------------------+ +------------------------+
| HardDisk | | OS |
+------------------------+ +------------------------+
| +read(): boolean | | +load(): boolean |
| +write(): boolean | | +shutdown(): boolean |
| +getCapacity(): long | | +getVersion(): String |
| +getStatus(): String | | +getStatus(): String |
+------------------------+ +------------------------+
Java源代码实现

  1. 子系统类 - 内存
    java
    // Memory.java - 内存子系统
    public class Memory {
    private long size; // 内存大小(MB)
    private boolean isChecked;

    public Memory(long size) {
    this.size = size;
    this.isChecked = false;
    }

    /**

    • 内存自检
      */
      public boolean check() {
      System.out.println("🔄 内存自检中...");
      try {
      // 模拟自检过程
      Thread.sleep(1000);

       // 模拟自检结果(90%概率成功)boolean success = Math.random() > 0.1;if (success) {System.out.println("✅ 内存自检通过");isChecked = true;return true;} else {System.out.println("❌ 内存自检失败:发现错误");return false;}
      

      } catch (InterruptedException e) {
      System.out.println("❌ 内存自检过程被中断");
      return false;
      }
      }

    /**

    • 获取内存大小
      */
      public long getSize() {
      return size;
      }

    /**

    • 获取内存状态
      */
      public String getStatus() {
      if (!isChecked) {
      return "未自检";
      }
      return "正常运行 - " + (size / 1024) + " GB";
      }

    /**

    • 清理内存状态
      */
      public void reset() {
      isChecked = false;
      System.out.println("🧹 内存状态已重置");
      }
      }
  2. 子系统类 - CPU
    java
    // CPU.java - CPU子系统
    public class CPU {
    private String model;
    private double frequency; // GHz
    private boolean isRunning;

    public CPU(String model, double frequency) {
    this.model = model;
    this.frequency = frequency;
    this.isRunning = false;
    }

    /**

    • 启动CPU运行
      */
      public boolean run() {
      System.out.println("🚀 启动CPU运行...");
      try {
      // 模拟启动过程
      Thread.sleep(800);

       // 模拟启动结果(95%概率成功)boolean success = Math.random() > 0.05;if (success) {System.out.println("✅ CPU启动成功:" + model + " @ " + frequency + "GHz");isRunning = true;return true;} else {System.out.println("❌ CPU启动失败:温度异常");return false;}
      

      } catch (InterruptedException e) {
      System.out.println("❌ CPU启动过程被中断");
      return false;
      }
      }

    /**

    • 停止CPU运行
      */
      public boolean stop() {
      if (isRunning) {
      System.out.println("🛑 停止CPU运行");
      isRunning = false;
      return true;
      }
      return true;
      }

    /**

    • 获取CPU频率
      */
      public double getFrequency() {
      return frequency;
      }

    /**

    • 获取CPU状态
      */
      public String getStatus() {
      if (!isRunning) {
      return "未运行";
      }
      return "运行中 - " + model + " @ " + frequency + "GHz";
      }

    /**

    • 获取CPU型号
      */
      public String getModel() {
      return model;
      }
      }
  3. 子系统类 - 硬盘
    java
    // HardDisk.java - 硬盘子系统
    public class HardDisk {
    private long capacity; // GB
    private String type;
    private boolean isReady;

    public HardDisk(long capacity, String type) {
    this.capacity = capacity;
    this.type = type;
    this.isReady = false;
    }

    /**

    • 硬盘读取
      */
      public boolean read() {
      System.out.println("📖 硬盘读取中...");
      try {
      // 模拟读取过程
      Thread.sleep(1200);

       // 模拟读取结果(92%概率成功)boolean success = Math.random() > 0.08;if (success) {System.out.println("✅ 硬盘读取成功:" + capacity + "GB " + type);isReady = true;return true;} else {System.out.println("❌ 硬盘读取失败:发现坏道");return false;}
      

      } catch (InterruptedException e) {
      System.out.println("❌ 硬盘读取过程被中断");
      return false;
      }
      }

    /**

    • 硬盘写入
      */
      public boolean write() {
      if (!isReady) {
      System.out.println("❌ 硬盘未就绪,无法写入");
      return false;
      }
      System.out.println("📝 硬盘写入中...");
      return true;
      }

    /**

    • 获取硬盘容量
      */
      public long getCapacity() {
      return capacity;
      }

    /**

    • 获取硬盘类型
      */
      public String getType() {
      return type;
      }

    /**

    • 获取硬盘状态
      */
      public String getStatus() {
      if (!isReady) {
      return "未就绪";
      }
      return "就绪 - " + capacity + "GB " + type;
      }

    /**

    • 重置硬盘状态
      */
      public void reset() {
      isReady = false;
      System.out.println("🧹 硬盘状态已重置");
      }
      }
  4. 子系统类 - 操作系统
    java
    // OS.java - 操作系统子系统
    public class OS {
    private String name;
    private String version;
    private boolean isLoaded;

    public OS(String name, String version) {
    this.name = name;
    this.version = version;
    this.isLoaded = false;
    }

    /**

    • 加载操作系统
      */
      public boolean load() {
      System.out.println("🖥️ 加载操作系统中...");
      try {
      // 模拟加载过程
      Thread.sleep(2000);

       // 模拟加载结果(85%概率成功)boolean success = Math.random() > 0.15;if (success) {System.out.println("✅ 操作系统加载成功:" + name + " " + version);isLoaded = true;return true;} else {System.out.println("❌ 操作系统加载失败:系统文件损坏");return false;}
      

      } catch (InterruptedException e) {
      System.out.println("❌ 操作系统加载过程被中断");
      return false;
      }
      }

    /**

    • 关闭操作系统
      */
      public boolean shutdown() {
      if (isLoaded) {
      System.out.println("🔒 关闭操作系统中...");
      try {
      Thread.sleep(1000);
      System.out.println("✅ 操作系统已安全关闭");
      isLoaded = false;
      return true;
      } catch (InterruptedException e) {
      System.out.println("❌ 操作系统关闭过程被中断");
      return false;
      }
      }
      return true;
      }

    /**

    • 获取系统版本
      */
      public String getVersion() {
      return version;
      }

    /**

    • 获取系统名称
      */
      public String getName() {
      return name;
      }

    /**

    • 获取系统状态
      */
      public String getStatus() {
      if (!isLoaded) {
      return "未加载";
      }
      return "运行中 - " + name + " " + version;
      }
      }
  5. 外观类 - 计算机
    java
    // Computer.java - 计算机外观类
    public class Computer {
    private Memory memory;
    private CPU cpu;
    private HardDisk hardDisk;
    private OS os;
    private boolean isPoweredOn;

    public Computer() {
    // 初始化硬件配置
    this.memory = new Memory(16384); // 16GB
    this.cpu = new CPU("Intel Core i7", 3.6);
    this.hardDisk = new HardDisk(1024, "SSD"); // 1TB SSD
    this.os = new OS("Windows", "11 Pro");
    this.isPoweredOn = false;
    }

    public Computer(Memory memory, CPU cpu, HardDisk hardDisk, OS os) {
    this.memory = memory;
    this.cpu = cpu;
    this.hardDisk = hardDisk;
    this.os = os;
    this.isPoweredOn = false;
    }

    /**

    • 开机 - 外观模式的核心方法
      */
      public boolean powerOn() {
      System.out.println("🔌 开始启动计算机...");
      System.out.println("=" .repeat(40));

      // 1. 内存自检
      if (!memory.check()) {
      System.out.println("❌ 计算机启动失败:内存自检未通过");
      return false;
      }

      // 2. 启动CPU
      if (!cpu.run()) {
      System.out.println("❌ 计算机启动失败:CPU启动失败");
      return false;
      }

      // 3. 硬盘读取
      if (!hardDisk.read()) {
      System.out.println("❌ 计算机启动失败:硬盘读取失败");
      // 停止已启动的组件
      cpu.stop();
      return false;
      }

      // 4. 加载操作系统
      if (!os.load()) {
      System.out.println("❌ 计算机启动失败:操作系统加载失败");
      // 停止已启动的组件
      cpu.stop();
      hardDisk.reset();
      return false;
      }

      System.out.println("=" .repeat(40));
      System.out.println("🎉 计算机启动成功!");
      isPoweredOn = true;
      return true;
      }

    /**

    • 关机
      */
      public boolean powerOff() {
      System.out.println("🔌 开始关闭计算机...");

      boolean success = true;

      // 按顺序关闭各个组件
      if (!os.shutdown()) {
      success = false;
      }

      if (!cpu.stop()) {
      success = false;
      }

      hardDisk.reset();
      memory.reset();

      if (success) {
      System.out.println("✅ 计算机已安全关闭");
      isPoweredOn = false;
      } else {
      System.out.println("⚠️ 计算机关闭过程中出现问题");
      }

      return success;
      }

    /**

    • 强制关机
      */
      public boolean forceShutdown() {
      System.out.println("🛑 强制关闭计算机...");
      isPoweredOn = false;
      memory.reset();
      System.out.println("✅ 计算机已强制关闭");
      return true;
      }

    /**

    • 获取计算机状态
      */
      public String getStatus() {
      if (!isPoweredOn) {
      return "关机状态";
      }

      StringBuilder status = new StringBuilder();
      status.append("运行状态\n");
      status.append("├─ 内存: ").append(memory.getStatus()).append("\n");
      status.append("├─ CPU: ").append(cpu.getStatus()).append("\n");
      status.append("├─ 硬盘: ").append(hardDisk.getStatus()).append("\n");
      status.append("└─ 系统: ").append(os.getStatus());

      return status.toString();
      }

    /**

    • 获取系统信息
      */
      public String getSystemInfo() {
      StringBuilder info = new StringBuilder();
      info.append("=== 计算机配置信息 =\n");
      info.append("内存: ").append(memory.getSize() / 1024).append(" GB\n");
      info.append("CPU: ").append(cpu.getModel()).append(" @ ").append(cpu.getFrequency()).append("GHz\n");
      info.append("硬盘: ").append(hardDisk.getCapacity()).append(" GB ").append(hardDisk.getType()).append("\n");
      info.append("系统: ").append(os.getName()).append(" ").append(os.getVersion()).append("\n");
      info.append("
      ==================");

      return info.toString();
      }

    /**

    • 检查计算机是否开机
      */
      public boolean isPoweredOn() {
      return isPoweredOn;
      }

    // Getter方法
    public Memory getMemory() {
    return memory;
    }

    public CPU getCpu() {
    return cpu;
    }

    public HardDisk getHardDisk() {
    return hardDisk;
    }

    public OS getOs() {
    return os;
    }
    }

  6. 客户端类 - 主机
    java
    // Mainframe.java - 主机(客户端)
    public class Mainframe {
    private Computer computer;

    public Mainframe() {
    this.computer = new Computer();
    }

    public Mainframe(Computer computer) {
    this.computer = computer;
    }

    /**

    • 开机按钮 - 客户端只需要调用这个简单的方法
      */
      public boolean on() {
      System.out.println("🖲️ 按下开机按钮...");
      return computer.powerOn();
      }

    /**

    • 关机按钮
      */
      public boolean off() {
      System.out.println("🖲️ 按下关机按钮...");
      return computer.powerOff();
      }

    /**

    • 强制关机按钮
      */
      public boolean forceOff() {
      System.out.println("🖲️ 长按电源按钮强制关机...");
      return computer.forceShutdown();
      }

    /**

    • 获取系统信息
      */
      public String getSystemInfo() {
      return computer.getSystemInfo();
      }

    /**

    • 显示计算机状态
      */
      public void displayStatus() {
      System.out.println("=== 计算机状态 =");
      System.out.println(computer.getStatus());
      System.out.println("
      ===============");
      }

    /**

    • 重启计算机
      */
      public boolean restart() {
      System.out.println("🔄 重启计算机...");

      if (computer.isPoweredOn()) {
      if (!computer.powerOff()) {
      System.out.println("⚠️ 关机失败,尝试强制重启");
      computer.forceShutdown();
      }
      }

      // 等待一段时间再开机
      try {
      Thread.sleep(2000);
      } catch (InterruptedException e) {
      System.out.println("重启过程被中断");
      }

      return computer.powerOn();
      }
      }

  7. 测试演示类
    java
    // FacadePatternDemo.java - 外观模式演示
    public class FacadePatternDemo {

    // 演示基本外观模式
    public static void demonstrateBasicFacade() {
    System.out.println("=== 基本外观模式演示 ===");

     Mainframe mainframe = new Mainframe();System.out.println("\n1. 显示系统信息:");System.out.println(mainframe.getSystemInfo());System.out.println("\n2. 开机过程:");boolean success = mainframe.on();if (success) {System.out.println("\n3. 开机后状态:");mainframe.displayStatus();System.out.println("\n4. 关机过程:");mainframe.off();}
    

    }

    // 演示外观模式的优势
    public static void demonstrateFacadeAdvantages() {
    System.out.println("\n\n=== 外观模式优势演示 ===");

     System.out.println("没有外观模式的情况:");System.out.println("客户端需要了解所有子系统的细节:");// 模拟没有外观模式的复杂调用Memory memory = new Memory(8192);CPU cpu = new CPU("AMD Ryzen 5", 3.4);HardDisk hardDisk = new HardDisk(512, "HDD");OS os = new OS("Linux", "Ubuntu 22.04");System.out.println("\n手动启动计算机:");if (!memory.check()) {System.out.println("启动失败");return;}if (!cpu.run()) {System.out.println("启动失败");return;}if (!hardDisk.read()) {System.out.println("启动失败");cpu.stop();return;}if (!os.load()) {System.out.println("启动失败");cpu.stop();hardDisk.reset();return;}System.out.println("手动启动成功!");System.out.println("\n使用外观模式的情况:");Computer computer = new Computer(memory, cpu, hardDisk, os);Mainframe mainframe = new Mainframe(computer);System.out.println("只需要调用一个方法:");mainframe.on();
    

    }

    // 演示错误处理
    public static void demonstrateErrorHandling() {
    System.out.println("\n\n=== 错误处理演示 ===");

     System.out.println("模拟多次启动,展示可能的错误情况:");for (int i = 1; i <= 5; i++) {System.out.println("\n--- 第 " + i + " 次启动尝试 ---");Mainframe mainframe = new Mainframe();boolean success = mainframe.on();if (success) {System.out.println("🎉 启动成功!");mainframe.displayStatus();// 正常关机mainframe.off();} else {System.out.println("💥 启动失败!");}}
    

    }

    // 演示实际应用场景
    public static void demonstrateRealWorldScenario() {
    System.out.println("\n\n=== 实际应用场景演示 ===");

     System.out.println("场景:用户使用计算机");Mainframe myComputer = new Mainframe();System.out.println("\n1. 用户按下开机按钮:");if (myComputer.on()) {System.out.println("\n2. 用户查看系统状态:");myComputer.displayStatus();System.out.println("\n3. 用户使用计算机一段时间后...");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("\n4. 用户按下关机按钮:");myComputer.off();} else {System.out.println("计算机启动失败,请联系技术支持");}
    

    }

    // 演示重启功能
    public static void demonstrateRestart() {
    System.out.println("\n\n=== 重启功能演示 ===");

     Mainframe mainframe = new Mainframe();System.out.println("1. 首次启动:");if (mainframe.on()) {System.out.println("\n2. 执行重启:");if (mainframe.restart()) {System.out.println("\n3. 重启后状态:");mainframe.displayStatus();System.out.println("\n4. 最终关机:");mainframe.off();}}
    

    }

    // 比较外观模式与其他模式
    public static void compareWithOtherPatterns() {
    System.out.println("\n\n=== 外观模式与其他模式比较 ===");

     System.out.println("外观模式 vs 其他结构型模式:");System.out.println("┌─────────────────┬───────────────────┬──────────────────┬──────────────────┐");System.out.println("│     模式        │     主要目的      │    适用场景      │    特点          │");System.out.println("├─────────────────┼───────────────────┼──────────────────┼──────────────────┤");System.out.println("│   外观模式      │ 简化复杂系统接口  │ 复杂子系统调用    │ 提供统一接口     │");System.out.println("│   适配器模式    │ 接口转换          │ 接口不兼容        │ 转换接口格式     │");System.out.println("│   装饰器模式    │ 动态添加功能      │ 需要扩展功能      │ 透明包装对象     │");System.out.println("│   组合模式      │ 处理树形结构      │ 部分-整体结构     │ 统一处理叶子容器 │");System.out.println("└─────────────────┴───────────────────┴──────────────────┴──────────────────┘");System.out.println("\n外观模式的优势:");System.out.println("1. 简化客户端:客户端不需要了解子系统的复杂细节");System.out.println("2. 解耦合:将客户端与子系统解耦,提高子系统的独立性");System.out.println("3. 易于使用:提供简单一致的接口");System.out.println("4. 层次化结构:可以定义多个外观类,为不同层次的客户端服务");
    

    }

    public static void main(String[] args) {
    System.out.println("实验12:外观模式 - 计算机开启");
    System.out.println("=========================================");

     demonstrateBasicFacade();demonstrateFacadeAdvantages();demonstrateErrorHandling();demonstrateRealWorldScenario();demonstrateRestart();compareWithOtherPatterns();System.out.println("\n=== 实验总结 ===");System.out.println("1. 外观模式为复杂的子系统提供一个统一的简单接口");System.out.println("2. 客户端只需要与外观类交互,不需要了解子系统的细节");System.out.println("3. 降低了客户端与子系统的耦合度");System.out.println("4. 符合迪米特法则(最少知识原则)");System.out.println("5. 在实际应用中,外观模式常用于框架设计、API封装等场景");
    

    }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/965749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Python刷题记录]-有效的括号-栈-简单

[Python刷题记录]-有效的括号-栈-简单链接:20. 有效的括号 - 力扣(LeetCode) python中list就可以直接当栈用1 class Solution(object):2 def isValid(self, s):3 """4 :type s:…

[KaibaMath]1021 关于[0, 1]与[a, b]等势的证明

两个集合等势(也称基数相等),当且仅当存在从一个集合到另一个集合的双射(既是单射又是满射的映射,即一一映射)。下面给出[0, 1]与[a, b]等势的证明。

超参数调优:Grid Search 和 Random Search 的实战对比

模型训练完能够到达85%的准确率,很多人觉得就差不多了。但是通过超参数优化能让模型释放真正的潜力。最后那3-5个点的提升,往往决定了你的模型是"还行"还是"能打"。这篇文章会把Grid Search和Ra…

征程 6X 常见 kernel panic 问题

1. 概述 kernel panic 包含了多种内核异常类型,包括但不限于:空指针/异常指针、HungTask、RCU Stall、softlockup、hardlockup、OOM、BUG_ON。 下图是各种类型 panic 的路径:2. 通用方法kpanic 类异常均为 kernel 软…

实用指南:26秋招三分钟快速背诵一个八股-Spring中Bean的生命周期

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

11.14 —— (VP)2024icpc杭州

沈阳站赛前的最后一把 \(VP\) ,希望能在沈阳站偷到牌子qwq。。。 赛时 \(4\) 题,高罚时,输在 \(E\) 题开出来得太慢了。 \(A,K\) 纯签到。 \(E\): 显然所在楼层越高越有利,那么当前只要我们有免费上升的机会,就可…

2025-11-13~14 hetao1733837的刷题记录

2025-11-13~14 hetao1733837的刷题记录2025-11-13~14 hetao1733837的刷题记录 11-13 [JOISC 2014]Water Bottle 原题链接1:[P14422 [JOISC 2014] 水桶 / Water Bottle]([P14422 JOISC 2014] 水桶 / Water Bottle - 洛…

CF1381D The Majestic Brown Tree Snake/SS251114C. 历遍的树(inverse)

题意:给定一棵$n$个点的树,一条蛇在路径$(h,t)$ 上($h \neq t$),蛇类似火车移动,问蛇能否走到路径$(t,h)$ ,需线性或接近线性做法。思路:合法枢纽(关键点)指存在三条长度大于等于蛇长岔路的点。先证明若直径…

2025年11月宁夏数字人服务商/供应商最新专业推荐:AI驱动下的企业数字化转型新引擎

随着人工智能技术的飞速发展,数字人作为AI技术的重要应用成果,正逐渐成为企业数字化转型的核心力量。在宁夏地区,多家科技企业纷纷布局数字人领域,为不同行业提供多样化的数字人解决方案。本榜单基于技术实力、产品…

[KaibaMath]1020 与海明码有关的最小值问题

海明码的核心原理是通过插入校验位建立数据位与校验位的对应关系,实现单比特错误纠正和多比特错误检测。本文给出已知m个数据位,求校验位n的最小值的求解公式。

FreeSWITCH使用RNNoise进行实时通话降噪

FreeSWITCH使用RNNoise进行实时通话降噪操作系统:Debian 12.5_x64 FreeSWITCH版本: 1.10.11 rnnoise版本:0.2从事FreeSWITCH相关工作,大概率会遇到静音检测和降噪的事情,之前整理过vad相关的内容: https://mp.we…

不是 DE_aemmprty 的草稿纸

关于难度\(\textbf{Easy}\):我是 zak,我一眼秒了,我觉得这题没啥技巧啊! \(\textbf{Medium}\):完全自己想出,但想了较长时间。 \(\textbf{Hard}\):不完全是自己想出。\([0, 1]\) 表示在同档题中的难度。 qoj122…

2025年宁夏数字人服务商专业评测:AI驱动下的企业数字化转型新引擎

随着人工智能技术的飞速发展,数字人作为AI技术的重要应用成果,正逐渐成为企业数字化转型的核心力量。在宁夏地区,多家科技企业纷纷布局数字人领域,为不同行业提供多样化的数字人解决方案。本榜单基于技术实力、产品…

SqlServer资料

SqlServer资料SQLServer2014性能提升 SQLServer文件与文件组总结 SQL Server表分区详细版 SqlServer内存资源释放 SqlServer内存会话连接 SqlServer连接池 SQLServer触发器 SqlServer并行基础用…

如何将 Android 联系人备份到 Mac 的 4 种容易

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

收藏项目系列---【大屏模板合集】

收藏项目系列---【大屏模板合集】Gitee链接: https://gitee.com/iGaoWei/big-data-view GitHub链接: https://github.com/iGaoWei/BigDataView愿你走出半生,归来仍是少年!

Spring AI Alibaba 项目源码学习(六)-Agent Framework 工作原理与使用

Agent Framework 工作原理与使用 请关注微信公众号:阿呆-bot 概述 Spring AI Alibaba Agent Framework 是一个基于 ReAct(Reasoning + Acting)模式的智能 Agent 开发框架,为 Java 开发者提供了快速构建、编排和部署…

分布式之RabbitMQ的使用(3)QueueBuilder - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …