门面模式使用一个门面类来包装一些复杂的类,对外提供一个简单的访问方法。
见如下代码:
class CPU { public void startup() { System.out.println("cpu startup!"); } public void shutdown() { System.out.println("cpu shutdown!"); }}class Memory { public void startup() { System.out.println("memory startup!"); } public void shutdown() { System.out.println("memory shutdown!"); }}class Disk { public void startup() { System.out.println("disk startup!"); } public void shutdown() { System.out.println("disk shutdown!"); }}//门面类class Computer { private CPU cpu; private Memory memory; private Disk disk; public Computer() { cpu = new CPU(); memory = new Memory(); disk = new Disk(); } public void startup() { System.out.println("start the computer!"); cpu.startup(); memory.startup(); disk.startup(); System.out.println("start computer finished!"); } public void shutdown() { System.out.println("begin to close the computer!"); cpu.shutdown(); memory.shutdown(); disk.shutdown(); System.out.println("computer closed!"); }}public class User { public static void main(String[] args) { Computer computer = new Computer(); computer.startup(); computer.shutdown(); }}代码中Computer类就是一个门面类,可以通过它的方法来调用另三个类的方法,而不用一一调用。
HibernateTemplate类也是一个典型的门面类,它是SessionFactory、Session、Query等类的门面,当客户端程序需要进行持久化查询时,程序无需调用这些类,而是直接调用HibernateTemplate门面类的方法即可。
此外,J2EE应用里业务逻辑组件来封装DAO组件也是典型的门面模式。每个业务逻辑组件都是众多DAO组件的门面,系统的控制器类无需直接访问DAO组件,而只需与业务逻辑组件交互即可。