个人随笔
目录
九、结构型-外观(Facade)模式
2020-09-09 21:36:51

外观模式是为了解决类与类之间的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Façade类中,降低了类与类之间的耦合度,该模式中没有涉及到接口,我们以一个计算机的启动过程为例。

1、UML

2、CPU,Memory.Disk

  1. public class CPU {
  2. public void startup() {
  3. System.out.println("启动CPU");
  4. }
  5. public void shutdown() {
  6. System.out.println("关闭CPU");
  7. }
  8. }
  1. public class Memory {
  2. public void startup() {
  3. System.out.println("启动Memory");
  4. }
  5. public void shutdown() {
  6. System.out.println("关闭Memory");
  7. }
  8. }
  1. public class Disk {
  2. public void startup() {
  3. System.out.println("启动Disk");
  4. }
  5. public void shutdown() {
  6. System.out.println("关闭Disk");
  7. }
  8. }

3、Computer

  1. public class Computer {
  2. private CPU cpu;
  3. private Memory memory;
  4. private Disk disk;
  5. public Computer() {
  6. cpu=new CPU();
  7. memory=new Memory();
  8. disk=new Disk();
  9. }
  10. public void startup() {
  11. System.out.println("启动Computer");
  12. cpu.startup();
  13. memory.startup();
  14. disk.startup();
  15. System.out.println("Computer启动成功");
  16. }
  17. public void shutdown() {
  18. System.out.println("关闭Computer");
  19. cpu.shutdown();
  20. memory.shutdown();
  21. disk.shutdown();
  22. System.out.println("Computer关闭成功");
  23. }
  24. }

这里没有从构造方法传进来,是因为计算器本来就是一个整体,CPU,Memory,Disk不是后面装配进来的。是在计算器启动的时候才会启动的。

4、测试类Test

  1. public class Test {
  2. public static void main(String[] args) {
  3. Computer computer = new Computer();
  4. computer.startup();
  5. computer.shutdown();
  6. }
  7. }

运行将会输出如下结果

启动Computer
启动CPU
启动Memory
启动Disk
Computer启动成功
关闭Computer
关闭CPU
关闭Memory
关闭Disk
Computer关闭成功

总结

如果我们没有Computer类,那么,CPU,Memory,Disk他们之间将会互相持有实例,产生关系,这样会造成严重的依赖,修改一个类,可能会带来其他类的修改,这个不是我们想要看到的,有了Computer类,他们之间的关系被放在了Computer类里,这里起到了解耦的作用,这就是外观模式。

 233

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2