在电脑主机(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、不能很好的限制客户端直接使用子系统类。


在这里插入图片描述

相关文章
|
14天前
|
C++
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
28 0
|
13天前
|
存储 监控 Docker
如何限制docker使用的cpu,内存,存储
如何限制docker使用的cpu,内存,存储
|
17天前
|
Java 容器
【Azure Function App】Java Function在运行中遇见内存不足的错误
【Azure Function App】Java Function在运行中遇见内存不足的错误
|
20天前
|
存储 缓存 NoSQL
Redis内存管理揭秘:掌握淘汰策略,让你的数据库在高并发下也能游刃有余,守护业务稳定运行!
【8月更文挑战第22天】Redis的内存淘汰策略管理内存使用,防止溢出。主要包括:noeviction(拒绝新写入)、LRU/LFU(淘汰最少使用/最不常用数据)、RANDOM(随机淘汰)及TTL(淘汰接近过期数据)。策略选择需依据应用场景、数据特性和性能需求。可通过Redis命令行工具或配置文件进行设置。
35 2
|
22天前
|
缓存 Kubernetes 数据中心
在Docker中,如何控制容器占用系统资源(CPU,内存)的份额?
在Docker中,如何控制容器占用系统资源(CPU,内存)的份额?
|
10天前
|
Linux Shell 虚拟化
使用LiME收集主机物理内存的内容时发生宕机
使用LiME收集主机物理内存的内容时发生宕机
|
13天前
|
缓存 Linux 调度
Linux服务器如何查看CPU占用率、内存占用、带宽占用
Linux服务器如何查看CPU占用率、内存占用、带宽占用
49 0
|
19天前
|
Prometheus Kubernetes 监控
在K8S中,Pod占用内存和cpu较高,该如何解决?
在K8S中,Pod占用内存和cpu较高,该如何解决?
|
19天前
|
存储 Java API
【Azure Developer】通过Azure提供的Azue Java JDK 查询虚拟机的CPU使用率和内存使用率
【Azure Developer】通过Azure提供的Azue Java JDK 查询虚拟机的CPU使用率和内存使用率
|
20天前
|
Linux
在Linux中,如何找出占用CPU或内存最多的进程?
在Linux中,如何找出占用CPU或内存最多的进程?