设计模式-外观模式
(1)案例背景:
在计算机主机(Mainframe)中,只需要按下主机的开机按钮(on()),即可调用其他硬件设备和软件的启动方法,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘的(HardDisk)的读取(read())、操作系统(OS)的载入(load())等,如果某一过程发生错误则计算机启动失败。使用外观模式模拟该过程,绘制类图并编程实现。(课本230页第二题)
(2)实现步骤:
- 根据题意,画出外观模式的类图,使主机类Mainframe充当外观角色,内存类Memory,CPU类CPU,硬盘类HardDisk和操作系统类OS充当子系统角色
- 根据类图,编写并实现代码
- 编译并运行代码,使代码能够输出模拟出来的电脑开机过程
(3)案例总结:
在以下情况下可以使用外观模式:
- 当要为一个复杂子系统提供一个简单接口的时候可以使用外观模式,该接口可以满足大部分用户需求,用户也可以越过外观类直接访问子系统
- 客户程序和多个子系统之间存在很大的依赖性。引入外观类将子系统与客户以及其他子系统解耦,可以提高子系统的独立性和可移植性。
- 在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而是通过外观类建立联系,降低层之间的耦合度。
代码结构:
详细代码:
Memory.java:
package Mainframe.Function; import Mainframe.Mainframe.Mainframe; public class Memory { public void check(){ System.out.println("内存自检。"); } }
CPU.java:
package Mainframe.Function; public class CPU { public void run(){ System.out.println("CPU运行。"); } }
HardDisk.java:
package Mainframe.Function; public class HardDisk { public void read(){ System.out.println("硬盘读取。"); } }
OS.java:
package Mainframe.Function; public class OS { public void load(){ System.out.println("操作系统载入。"); } }
Mainframe.java:
package Mainframe.Mainframe; import Mainframe.Function.CPU; import Mainframe.Function.HardDisk; import Mainframe.Function.Memory; import Mainframe.Function.OS; public class Mainframe { public Memory memory = new Memory(); private CPU cpu = new CPU(); private HardDisk hardDisk = new HardDisk(); private OS os = new OS(); public void on(){ memory.check(); cpu.run(); hardDisk.read(); os.load(); } }
Client.java:
package Mainframe; import Mainframe.Mainframe.Mainframe; public class Client { public static void main(String[] args) { System.out.println("详细设计实验报告 1904班白旭君 2019005368"); Mainframe mainframe = new Mainframe(); mainframe.on(); } }
实验结果: