Java设计模式——结构型模式——外观模式(FACADE)

标签: 设计模式
5人阅读 评论(0) 收藏 举报
分类:

外观模式: 又称门面模式: 他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。


      (1) Facade(外观角色):在客户端可以调用它的方法,在外观角色中可以知道相关的(一个或者多个)子系统的功能和责任;在正常情况下,它将所有从客户端发来的请求委派到相应的子系统去,传递给相应的子系统对象处理。

      (2) SubSystem(子系统角色):在软件系统中可以有一个或者多个子系统角色,每一个子系统可以不是一个单独的类,而是一个类的集合,它实现子系统的功能;每一个子系统都可以被客户端直接调用,或者被外观角色调用,它处理由外观类传过来的请求;子系统并不知道外观的存在,对于子系统而言,外观角色仅仅是另外一个客户端而已。

public class SubSystemA {
    public void MethodA()
    {
        //业务实现代码
    }
}
public class SubSystemB {
    public void MethodB()
    {
        //业务实现代码
    }
}
public class SubSystemC {
    public void MethodC()
    {
        //业务实现代码
    }
}
class Facade
{
    private SubSystemA obj1 = new SubSystemA();
    private SubSystemB obj2 = new SubSystemB();
    private SubSystemC obj3 = new SubSystemC();

    public void Method()
    {
        obj1.MethodA();
        obj2.MethodB();
        obj3.MethodC();
    }
}
public class Client {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.Method();
    }
}

外观模式的优点

  • 对客户屏蔽子系统组件,减少了客户处理的对象数目并使得子系统使用起来更加容易。通过引入外观模式,客户代码将变得很简单,与之关联的对象也很少。
    实现了子系统与客户之间的松耦合关系,这使得子系统的组件变化不会影响到调用它的客户类,只需要调整外观类即可。
  • 降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间的移植过程,因为编译一个子系统一般不需要编译所有其他的子系统。一个子系统的修改对其他子系统没有任何影响,而且子系统内部变化也不会影响到外观对象。
  • 只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类。

外观模式的缺点

  • 不能很好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活性。
  • 在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。

在以下情况下可以使用外观模式:

  • 当要为一个复杂子系统提供一个简单接口时可以使用外观模式。该接口可以满足大多数用户的需求,而且用户也可以越过外观类直接访问子系统。
  • 客户程序与多个子系统之间存在很大的依赖性。引入外观类将子系统与客户以及其他子系统解耦,可以提高子系统的独立性和可移植性。
  • 在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度。


查看评论

Javascript 设计模式之外观模式【专家辅导】

随着 javascript ES6/7 的发布,很多老版本的设计模式的实现,今天来看是错误的,将被彻底颠覆。即便简单的单例模式,也将被重写,焕发新的生命。
  • 2017年06月29日 14:39

浅谈JAVA设计模式之——外观模式(Facade)

一、概述 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 二、适用性 1.当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断...
  • l1028386804
  • l1028386804
  • 2015-05-07 23:32:13
  • 3651

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

一个客户类需要和多个业务类交互,而这些业务类经常会作为整体出现,由于涉及到的类比较多,导致使用时代码较为复杂。外观模式通过引入一个新的外观类(Facade)来实现该功能,外观类为多个业务类的调用提供统...
  • yanbober
  • yanbober
  • 2015-05-04 09:29:17
  • 2676

JAVA设计模式十九--Facade(外观模式)

Facade(外观)模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。 Facade模式概述         实际应用中,我们在对付一些老旧...
  • hfmbook
  • hfmbook
  • 2012-06-29 15:25:41
  • 18977

一天学习两个设计模式之Facade模式(外观模式,结构型模式)

一天学习两个设计模式之Facade模式(外观模式,结构型模式)
  • Dax1n
  • Dax1n
  • 2017-05-03 19:36:58
  • 1024

C# 设计模式--外观模式(Facade)

     一个良好的面向对象应用程序应该是一个最小的类,这个类能够把其他可重用类的行为有效的组织起来。对一个子系统的类进行重构,直到每个类都有一个进行良好定义功能目标,所以代码易于维护。外观模式(Fa...
  • scucj
  • scucj
  • 2006-11-09 00:22:00
  • 3299

C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式) (Level 300)

  • 2008年09月13日 15:59
  • 6.06MB
  • 下载

C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式)

  • 2009年04月01日 09:48
  • 139KB
  • 下载

C#面向对象设计模式纵横谈(10)

  • 2008年05月11日 00:14
  • 6.18MB
  • 下载

【设计模式】使用unity实现外观模式(Facade mode)

阅读《大话设计模式》后,自己根据unity的特性写的一个简单demo,如有不妥之处,欢迎评论纠正.... 首先贴上书中关于外观模式的代码: using System...
  • qq_28221881
  • qq_28221881
  • 2017-04-05 21:32:09
  • 496
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 1962
    积分: 429
    排名: 11万+
    博客专栏
    文章存档