Java设计模式-外观模式

来源:互联网 发布:firefox知乎 编辑:程序博客网 时间:2024/06/06 17:40

1、概念

外观模式(Facade):是为了解决类与类之间的依赖关系的,像spring一样,可以将类与类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类与类之间的耦合度,该模式中没有涉及到接口。

我们先看两张结构图,可以一目了然的了解外观模式的作用。

未使用外观模式:
未使用外观模式

使用了外观模式:
使用了外观模式

我们来看一下外观模式(门面模式)的两个角色
外观模式角色

(1)门面(Facade)角色:客户端可以调用这个角色的方法,此角色知晓相关的(一个或者多个)子系统的功能和责任,在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。

(2)子系统(SubSystem)角色:可以同时有一个或者多个子系统。每个子系统都不是一个单独的类,而是一个类的集合(如上面的子系统就是由ModuleA、ModuleB、ModuleC三个类组合而成)。每个子系统都可以被客户端直接调用,或者被门面角色调用。子系统并不知道门面的存在,对于子系统而言,门面仅仅是另外一个客户端而已。

2、代码实现

/**  * 示例:外观模式,也称门面模式  *   * 优点:为了解决类与类之间的依赖关系,降低了类与类之间的耦合度  *   * 该模式中没有涉及到接口  */  class Memory {      public void startup() {          System.out.println("this is memory startup...");      }      public void shutdown() {          System.out.println("this is memory shutdown...");      }  }  class CPU {      public void startup() {          System.out.println("this is CPU startup...");      }      public void shutdown() {          System.out.println("this is CPU shutdown...");      }  }  
/**  * 作为Facade,持有Memory、CPU的实例  *   * 任务让Computer帮咱们处理,我们无需直接和Memory、CPU打交道  *   * 这里有点像去商店里买东西:咱们买东西只需要到商店去买,而无需去生产厂家那里买。  *   * 商店就可以称为是一个Facade外观(门面)模式。 */  class Computer {      private Memory memory;      private CPU cpu;      public Computer() {          memory = new Memory();          cpu = new CPU();      }      public void startup() {          System.out.println("begin to start the computer...");          memory.startup();          cpu.startup();          System.out.println("computer start finished...");      }      public void shutdown() {          System.out.println("begin to close the computer...");          memory.shutdown();          cpu.shutdown();          System.out.println("computer close finished...");      }  }  
/**  * 客户端测试类  */  public class Test {      public static void main(String[] args) {          Computer computer = new Computer();          computer.startup();          System.out.println("\n");          computer.shutdown();      }  } 
原创粉丝点击