设计模式之门面模式(代码片段)

1314xf 1314xf     2023-02-14     436

关键词:

门面模式

一:门面模式概述

在现实世界中,外墙都在我们身边。操作系统就是这样一个例子 - 您没有看到计算机的所有内部工作方式,但操作系统提供了使用机器的简化界面。简而言之,门面模式旨在使事物看起来更清洁,更容易操作。


定义:为子系统中的一组接口提供统一接口。Fa?ade定义了一个更高级别的接口,使子系统更易于使用。


门面模式只是将客户端与子系统隔离,结构图如下:

技术分享图片

角色:

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

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

与适配器模式一样,Facade可用于隐藏第三方库或某些遗留代码的内部工作方式。客户端需要做的就是与Facade交互,而不是它所包含的子系统.

二 :门面模式实战

某购物系统需要用户登录支付,客户端不清楚里面会调用哪些系统,它只管提供负责调用购买方法来达到购买的目的。

登录子系统:

// 登录子系统
public class Login 
    public void Login(String username, String password)
        // 登录相关
    

生成订单子系统:

//生成订单子系统
public class Order 
    public void createOrder(String userName)
        // 生成订单相关
    

支付子系统:

// 支付子系统
public class Pay 
    public void payOrder(String username)
        // 支付相关
        System.out.println("尊敬的" + username + ",您的商品购买成功" + ";请保管好您的订单号:"
                + UUID.randomUUID().toString());
    

购买外观类:

// 购买外观类
public class ShopingFacade 
    private Login loginHelp;
    private Order orderHelp;
    private Pay payHelp;

    public ShopingFacade()
        this.loginHelp = new Login();
        this.orderHelp = new Order();
        this.payHelp = new Pay();
    

    // 用户购买商品
    public void shop(String userName, String password)
        loginHelp.Login(userName, password);
        orderHelp.createOrder(userName);
        payHelp.payOrder(userName);
    

客户端:

public class Client 
    public static void main(String[] args) 
        // 购买外观类,客户端并不知道里面调用了登录,订单和支付子系统
        ShopingFacade shopingFacade = new ShopingFacade();
        shopingFacade.shop("tom", "123");
    

运行结果:

尊敬的tom,您的商品购买成功;请保管好您的订单号:438e379c-2c03-4579-b732-8bd23daf8e0b

在整个实例中,外观类对客户端屏蔽了3个子系统,减少了客户端要处理的对象,使得客户端代码变得很简单。


三:门面模式总结

优势:

  1. 使客户端和子系统隔离,客户端代码变得很简单,不需要跟多个子系统进行关联。
  2. 子系统的变化不会影响客户端的代码。
  3. 子系统直接松耦合,一个系统的修改对其他系统没有影响。

劣势:

  1. 增加新的子类系统需要可能需要修改外观类的源码,违背开闭原则。

使用场景

  1. 当要为访问一系列复杂的子系统提供一个简单入口时可以使用外观模式。
  2. 客户端程序与多个子系统之间存在很大的依赖性。引入外观类可以将子系统与客户端解耦,从而提高子系统的独立性和可移植性。
  3. 在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度。

结构性设计模式之门面模式(代码片段)

@TOC门面模式概述应用场景为复杂的模块或子系统提供外界访问的模块。子系统相对独立。预防额外操作带来的风险。目的优缺点优点:减少系统相互依赖。提高灵活性。提高安全性。缺点:不符合开闭原则,如果要改东西很麻... 查看详情

java设计模式之门面模式(代码片段)

...个高层接口,让子系统更容易使用,属于结构型设计模式使用场景:为一个复杂的模式或者子系统提供一个简洁的供外界访问的接口希望提高子系统的独立性时当子系统由于不可避免的暂时原因导致可能存在BUG或者性... 查看详情

java设计模式之门面模式(代码片段)

...个高层接口,让子系统更容易使用,属于结构型设计模式使用场景:为一个复杂的模式或者子系统提供一个简洁的供外界访问的接口希望提高子系统的独立性时当子系统由于不可避免的暂时原因导致可能存在BUG或者性... 查看详情

设计模式之门面模式(代码片段)

设计模式之门面模式  门面模式(FacadePattern)也叫外观模式,是一种常见的封装模式,定义:Provideaunifiedinterfacetoasetofinterfacesinasubsystem.Facadedefinesahigher-levelinterfacethatmakesthesubsystemeasiertouse.(要求一个子系统的外部与其内... 查看详情

设计模式之门面模式(代码片段)

门面模式一:门面模式概述在现实世界中,外墙都在我们身边。操作系统就是这样一个例子-您没有看到计算机的所有内部工作方式,但操作系统提供了使用机器的简化界面。简而言之,门面模式旨在使事物看起来更清洁,更容... 查看详情

java设计模式之门面模式(代码片段)

...个高层接口,让子系统更容易使用,属于结构型设计模式使用场景:为一个复杂的模式或者子系统提供一个简洁的供外界访问的接口希望提高子系统的独立性时当子系统由于不可避免的暂时原因导致可能存在BUG或者性... 查看详情

设计模式之门面模式20170728

结构型设计模式之门面模式:一、含义门面模式也叫做外观模式,是一种比较常用的封装模式,其定义如下:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行,门面模式提供一个高层次的接口,使得子系统更... 查看详情

常用设计模式之门面模式

门面模式也可以叫做外观模式 为子系统或者模块中的一组接口提供一个一致的访问方式,此模式定义了一个高层接口,这个接口使得各个子系统/模块中的功能 更加容易使用。 实际应用中,我们在对付一些老旧的代码或者即便... 查看详情

设计模式之外观模式(代码片段)

  外观模式又叫门面模式,在平时的开发中使用的极其的频繁但是却非常的简单。使用外观模式可以让客户端轻松的调用复杂的系统接口,因为客户端根本不关心子系统的内部是如何实现的,他们只需要调用门面类提供的... 查看详情

外观模式(门面模式)(代码片段)

//飞机publicclassPlanepublicvoidbuyTicket()System.out.println("订购飞机票");//火车publicclassTrainpublicvoidbuyTicket()System.out.println("订购火车票");//景点publicclassScenerypublicvoidbuyTicket()System.ou 查看详情

设计模式——门面模式(代码片段)

定义一个子系统的外部与内部的通信必须通过一个统一的对象进行。门面模式提高一个高层次的接口,使得子系统更易实现。门面对象就是一个提供外部访问子系统的一个接口,除了这个接口不允许有任何访问子系统的行为发生... 查看详情

headfirst设计模式之门面模式

一、实现家庭影院1.1packageheadfirst.designpatterns.facade.hometheater;23publicclassHomeTheaterFacade{4Amplifieramp;5Tunertuner;6DvdPlayerdvd;7CdPlayercd;8Projectorprojector;9TheaterLightslights;10Screenscreen 查看详情

门面模式结构模式(代码片段)

门面模式Provideaunifiedinterfacetoasetofinterfacesinasubsystem.Facadedefinesahigher-levelinterfacethatmakesthesubsystemeasiertouse.为子系统中的一组接口提供一个统一的访问接口。门面定义了一个更高级的接口,使得子系统更容易使用。publicclassFacade/***门... 查看详情

外观模式(门面模式)(代码片段)

文章目录外观模式(门面模式)示例相关的设计模式使用典范参考外观模式(门面模式)定义:它为子系统中的一组接口提供一个统一的高层接口。这一接口使得子系统更加容易使用类型:结构型适用场景... 查看详情

设计模式系列--门面模式(代码片段)

定义门面模式又叫外观模式,祖的组词提供了一个统一的接口,用来访问子系统中的一群接口。门面模式定义了一个高层接口,简化了调用过程,无需深入了解子系统,以防给子系统带来风险;减少系统依赖、松散耦合;更好的... 查看详情

2.泡妞与设计模式外观模式(代码片段)

FACADE门面(外观)模式门面模式:外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它... 查看详情

设计模式之-外观模式(facadepattern)(代码片段)

外观模式外观模式(FacadePattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为... 查看详情

设置模式之-门面模式-心得随笔

...方法封装到一个方法中,方便使用接口的人调用,这就是门面模式也可以是完成一个功能需要调用很多接口,然后把这些接口再封一层,封成一个接口,对外暴露  查看详情