12 Sep 2014

Java设计模式:门面模式

注:本文为译文,原文出处java-design-patterns-in-stories

对于Facade Pattern, 比较常见的翻译有”外观模式”, “门面模式”, “刻面模式”, 个人认为”门面模式”还是比较言简意赅的.

门面模式隐藏了任务的复杂性并提供了一个简单的接口. 典型的例子就是计算机的启动. 当计算机启动时, 参与工作的包括:CPU, 内存, 硬件驱动等等. 为了简化用户的使用, 我们可以添加了一个门面, 它隐藏了整个任务的复杂程度并且提供了一个简单的接口加以替代.

1.门面模式类图

facade-design-pattern

2.Java门面模式例子

//the components of a computer

class CPU {
    public void processData() { }
}

class Memory {
    public void load() { }
}

class HardDrive {
    public void readdata() { }
}

/* Facade */
class Computer {
    private CPU cpu;
    private Memory memory;
    private HardDrive hardDrive;

    public Computer() {
        this.cpu = new CPU();
        this.memory = new Memory();
        this.hardDrive = new HardDrive();
    }

    public void run() {
        cpu.processData();
        memory.load();
        hardDrive.readdata();
    }
}


class User {
    public static void main(String[] args) {
        Computer computer = new Computer();
        computer.run();
    }
}

3.项目中的应用

javax.faces.context包内, ExternalContext内部使用了ServletContext, HttpSession, HttpServletRequest, HttpServletResponse等类. 它令Faces API对于其包含应用环境属性一无所知.

基于门面模式的例子来自于维基, 因此本文也归功于维基.

参考:

  1. ExternalContext
  2. Wiki Facade

Tags:
0 comments