设计模式:外观模式(Facade)

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式又称门面模式。

外观模式的角色
1. 门面角色:客户端可以调用这个角色的方法。此角色知晓相关的(一个或者多个)子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。
2. 子系统角色:可以同时有一个或者多个子系统。每个子系统都不是一个单独的类,而是一个类的集合。每个子系统都可以被刻度环直接调用,或者被门面角色调用。子系统并不知道门面的存在,对于子系统而言,门面仅仅是另外一个客户端而已。

举个简单例子
1 子系统角色

class Class1 {
    public void op1() {
        System.out.println("方法1");
    }
}
class Class2 {
    public void op2() {
        System.out.println("方法2");
    }
}
class Class3 {
    public void op3() {
        System.out.println("方法3");
    }
}

2 门面角色

class Facade {
    private Class1 one = new Class1();
    private Class2 two = new Class2();
    private Class3 three = new Class3();
    public void op1() {
        System.out.println("Facade op1()");
        one.op1();
    }
    public void op2() {
        System.out.println("Facade op2()");
        two.op2();
    }
    public void op3() {
        System.out.println("Facade op3()");
        three.op3();
    }

    public void Method() {
        System.out.println("Facade Method()");
        three.op3();
        two.op2();
        one.op1();
    }
}

测试代码:

Facade facade = new Facade();
facade.Method();

优点

  1. 松散耦合:门面模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护
  2. 简单易用:门面模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟踪多个子系统内部的模块进行交互,只需要跟门面类交互就可以了
  3. 更好的划分访问层次:通过合理的使用Facade,可以帮助我们更好的划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地掩藏了内部的细节。

Jdk中的Facade:java.lang.Class

外观模式和代理模式的区别
代理与外观的主要区别在于,代理对象代表一个单一对象而外观对象代表一个子系统,代理的客户对象无法直接访问对象,由代理提供单独的目标对象的访问,而通常外观对象提供对子系统各元件功能的简化的共同层次的调用接口。代理是一种原来对象的代表,其他需要与这个对象打交道的操作都是和这个代表交涉的。

外观模式和适配器模式的区别
外观与适配器都是对现存系统的封装。外观定义的新的接口,而适配器则是复用一个原有的接口,适配器是使两个已有的接口协同工作,而外观则是为现存系统提供一个更为方便的访问接口。如果硬要说外观是适配,那么适配器有用来适配对象的,而外观是用来适配整个子系统的。也就是说,外观所针对的对象的粒度更大。



参考资料
1. 《23种设计模式
2. 《细数JDK里的设计模式

时间: 2024-11-17 12:18:59

设计模式:外观模式(Facade)的相关文章

解读设计模式----外观模式(Facade Pattern)

一.模式简介 外观模式(Facade Pattern)可以将一系列复杂的类包装成一个简单的封闭接口.也称门面模式. 二.模式意图 每一种设计模式都有它的意图,我们看看设计模式的祖师们是怎么说的.按照GOF的说法,Facade模式的意图是:为了子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 三.模式UML(下图转自http://www.dofactory.com/) 四.模式参与者 门面(Facade)角色:客户端可以调用这个角色的方

设计模式(九)外观模式Facade(结构型)

设计模式--外观模式Facade(结构型): 1. 概述      外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. 例子1:一个电源总开关可以控制四盏灯.一个风扇.一台空调和一台电视机的启动和关闭.该电源总开关可以同时控制上述所有电器设备,电源总开关即为该系统的外观模式设计. 2. 问题 为了降低复杂性,常常将系统划分为若干个子系统.但是如何做到各个系统之间的通信和相互依赖关系达到最小呢? 3. 解决

乐在其中设计模式(C#) - 外观模式(Facade Pattern)

原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern)[索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 示例 有一个Message实体类,某对象对它的操作有Get()方法,另外还有一个对象有一个Validate()方法来判断用户是否有权限.现在提供一个高层接口来封装这两个方法. Messa

【设计模式】—— 外观模式Facade

模式意图 外观模式主要是为了为一组接口提供一个一致的界面.从而使得复杂的子系统与用户端分离解耦. 有点类似家庭常用的一键开关,只要按一个键,台灯卧室客厅的灯都亮了.虽然他们各有各自的开关,但是对外用一个来控制. 应用场景 1 为复杂系统 提供简单的接口. 2 客户程序与抽象类的实现部分分离. 3 构建层次系统时,用作入口. 模式结构 Facade 对外的统一接口 class Facade{ public void operation(){ subsystemClass1.operation();

Web中的积累:外观模式 Facade

壹 前言 目测好久没写文章了,距离上一篇文章也有二十多天.我是怎么了?哈哈~,两个字:生命.生命似乎说大了,那健康吧.吃一堑长一智吧 思考对生活 对生命 我的信仰?佛教?基督?-当你生病了,有药吃.比如感冒了感冒药你会觉得药难吃.人吗就是那样,但当你想到了,你生病了没药可吃是多么无奈.比如我 胸闷 胸疼.随之而来的是蹦波劳累,上海-温州-家里台州,各处跑.看病,啥?无病?no 那时候的自己想起乘车就怕,四肢无力.简直是注意力,精神都没了.看代码?看着java 想着是啥我都忘了.   后来医生药倒

[Head First设计模式]生活中学设计模式——外观模式

系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式--建造者模式 [Head First设计模式]饺子馆(冬至)中的设计模式--工厂模式 [Head First设计模式]一个人的平安夜--单例模式 [Head First设计模式]抢票中的设计模式--代理模式 [Head First设计模式]面向对象的3特征5原则 [Head First设计模式]鸭子

.NET设计模式-外观模式(Façade Pattern)

外观模式(Façade Pattern) --.NET设计模式系列之十二 Terrylee,2006年3月 概述 在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化.那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是要说的Façade 模式. 意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.[GOF <设计模式>] 示意

hand first设计模式 -外观模式

外观模式:提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更容易使用. Java代码 public class Light{ private String name; public Light(String name){ this.name = name; } public void on(){ System.out.println(name +" is on"); } public void off(){ System.out.println(nam

Java设计模式--外观模式

外观模式 为系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. Facade Pattern Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use. 类图 模式的结构与使用 外观模式的结构中包两种角色.

php设计模式 Facade(外观模式)_php技巧

模式定义:外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.外观模式又称为门面模式,它是一种对象结构型模式. 模式结构: 外观模式的就是让client客户端以一种简单的方式来调用比较复杂的系统,来完成一件事情. Subsystem: 复制代码 代码如下: class car { public function start() { print_r("