外观模式

软件设计模式
2021-05-17 14:29 · 阅读时长2分钟
小课

外观模式是通过一个简单的接口将各种复杂子系统的功能封装起来,让它们使用起来更加容易,也可以减少调用者与个子系统之间的耦合。

比如说启动计算机,需要CPU、内存、硬盘等模块的配合工作,最终才能完全启动,但是对于使用者来说,它需要的功能仅仅是启动计算机,至于中间各个模块如何工作它并不关心。

1class CPU {
2    public void freeze() { ... }
3    public void jump(long position) { ... }
4    public void execute() { ... }
5}
6
7class Memory {
8    public void load(long position, byte[] data) { ... }
9}
10
11class HardDrive {
12    public byte[] read(long lba, int size) { ... }
13}

启动计算机时,需要从硬盘读取启动指令,然后将指令加载到内存中,最后由CPU来执行指令,如果这些都需要使用者自己调用,一是增加学习成本,二是会让这些模块的代码与调用者严重耦合,为了解决这些问题,我们可以设计Computer类,通过一个接口将这些模块整合起来,这样使用者就只需要拥有Computer实例,再调用start方法即可。

1class Computer {
2    private CPU cpu;
3    private Memory memory;
4    private HardDrive hardDrive;
5
6    public void start() {
7        cpu.freeze();
8        memory.load(BOOT_ADDRESS, hardDrive.read(BOOT_SECTOR, SECTOR_SIZE));
9        cpu.jump(BOOT_ADDRESS);
10        cpu.execute();
11    }
12}
总结

外观模式用于创建一个类似Helper的接口,将原本复杂的各功能模块调用简化,让外部使用起来更加方便,也可以将内部功能模块与外界隔离,但是同时它会让外观类自身变得复杂。

外观模式设计模式Facade