在电脑主机(MainFrame)中只需要按下主机的开机按钮(on()),即可调用其它硬件设备和软件的启动方法,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘(Hard

简介: 该博客文章通过一个电脑主机启动的示例代码,展示了外观模式(Facade Pattern)的设计模式,其中主机(MainFrame)类通过调用内部硬件组件(如内存、CPU、硬盘)和操作系统的启动方法来实现开机流程,同时讨论了外观模式的优缺点。

在电脑主机(MainFrame)中只需要按下主机的开机按钮(on()),即可调用其它硬件设备和软件的启动方法,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘(Hard

1、UML类图

在这里插入图片描述


2、源码

package com.zheng;

public class MainFrame {
   
   
    private Memory memory=new Memory();        //关联关系建立联系
    private Cpu cpu=new Cpu();
    private HardDisk harddisk=new HardDisk();
    private Os os=new Os();

    public void fun() {
   
   
        memory.display();
        cpu.display();
        harddisk.display();
        os.display();
        System.out.println("开机正常");

    }

}


package com.zheng;

public class Memory {
   
   
    public void display() {
   
   
        System.out.println("1、内存正常");
    }

}


package com.zheng;

public class Cpu {
   
   
    public void display() {
   
   
        System.out.println("2、cpu运行正常");
    }


}

package com.zheng;

public class HardDisk {
   
   
    public void display() {
   
   
        System.out.println("3、硬盘读取正常");
    }


}

package com.zheng;

public class Os {
   
   
    public void display() {
   
   
        System.out.println("4、操作系统载入正常");
    }


}

package com.zheng;

import java.util.Scanner;

public class Client {
   
   

    public static void main(String[] args) {
   
   
        // TODO 自动生成的方法存根
        while (true) {
   
   

            MainFrame f = new MainFrame();
            Scanner scan = new Scanner(System.in);
            System.out.println("请输入ON进行开机:");
            String str = scan.nextLine();
            if (str.equals("ON")) {
   
   
                f.fun();
            } else {
   
   
                System.out.println("输入的信息有误!!!请重新输入");
            }
        }
    }

}

3、优缺点

优点:1、实现了子系统和客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的客户端,只需要调整外观模式就可以。2、一个子系统的修改对其他子系统没有任何影响。3、对客户端屏蔽了子系统的组件,减少了客户端所需处理的对象数目。
缺点:1、如果设计不当、增加新的子系统可能需要修改外观类的源代码,违反了开闭原则。2、不能很好的限制客户端直接使用子系统类。


在这里插入图片描述

相关文章
|
27天前
|
测试技术
升级电脑内存
升级电脑内存
44 2
|
3月前
|
C++
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
42 0
|
19小时前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
11 1
|
8天前
|
Rust 编译器
|
14天前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
|
27天前
|
固态存储 内存技术
升级电脑内存和硬盘
升级电脑内存和硬盘
39 6
|
12天前
|
运维 JavaScript Linux
容器内的Nodejs应用如何获取宿主机的基础信息-系统、内存、cpu、启动时间,以及一个df -h的坑
本文介绍了如何在Docker容器内的Node.js应用中获取宿主机的基础信息,包括系统信息、内存使用情况、磁盘空间和启动时间等。核心思路是将宿主机的根目录挂载到容器,但需注意权限和安全问题。文章还提到了使用`df -P`替代`df -h`以获得一致性输出,避免解析错误。
|
2月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
106 5
|
2月前
|
存储 网络协议 大数据
一文读懂RDMA: Remote Direct Memory Access(远程直接内存访问)
该文档详细介绍了RDMA(远程直接内存访问)技术的基本原理、主要特点及其编程接口。RDMA通过硬件直接在应用程序间搬移数据,绕过操作系统协议栈,显著提升网络通信效率,尤其适用于高性能计算和大数据处理等场景。文档还提供了RDMA编程接口的概述及示例代码,帮助开发者更好地理解和应用这一技术。
|
23天前
|
C# 开发工具 Windows
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
35 0