外观模式

/ 设计模式

外观模式(Facade Pattern)

为子系统中一系列接口提供一个统一的界面,从而使得子系统更加容易使用。

GoF23种设计模式中,属于结构型模式( Structural patterns)

外观模式,或叫门面模式。应该是我们最常使用的模式。

controller-service-dao后端三层模型中,可以说几乎每一个service逻辑都是一个外观模式的实现。

实现

uml类图

facade

我们可以清楚的看到客户端仅依赖于facade,而跟其余的三个子系统没有交集。

用facade作为封装,简化了子系统的使用,降低了client的复杂性。

code

把学校当做一个系统,该系统中有食堂、图书馆、宿舍三个子系统。

通过外观模式创建该系统时,我们可以把学校当做外观类,学生仅通过访问学校即可享受其他的子系统。

类图如下。

school system

public class School {

    private Library library = new Library();

    private Canteen canteen = new Canteen();

    private Dormitory dormitory = new Dormitory();


    public void inSchool(String name) {

        //学习
        library.learn(name);
        //吃饭
        canteen.eat(name);
        //休息
        dormitory.relax(name);

        System.out.println(name + "的完美校园生活...");
    }

}
public class Library {

    public void learn(String name) {
        System.out.println(name + "在图书馆学习...");
    }
}
public class Dormitory {

    public void relax(String name) {
        System.out.println(name + "在宿舍休息...");
    }
}
public class Canteen {

    public void eat(String name) {
        System.out.println(name + "在食堂吃饭...");
    }
}
public class Test {

    public static void main(String[] args) {

        School school = new School();

        school.inSchool("张三");
    }
}
张三在图书馆学习...
张三在食堂吃饭...
张三在宿舍休息...
张三的完美校园生活...

总结

外观模式可以很好的实现高内聚低耦合,缺点是违反了开闭原则,拓展性不强。