美文网首页Java设计模式设计模式
《设计模式》外观模式

《设计模式》外观模式

作者: 敏捷Studio | 来源:发表于2019-08-25 13:51 被阅读3次

基本介绍

定义

要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。外观模式提供一个高层次的接口,使得子系统更易于使用。

介绍

  • 外观模式属于结构型模式。
  • 外观模式也叫门面模式。
  • 通常我们对API进行封装,都会用到外观模式,只是我们可能不知道而已。外观模式通过一个外观类使得整个系统的结构只有一个统一的高层接口,这样能降低用户的使用成本。

UML类图

外观模式UML类图

角色说明:

  • Facade(外观角色):对外的统一入口。
  • Complex System(复杂系统):一般由多个子系统构成,负责具体功能的实现。

具体实现

我们玩游戏时一般都有登录和充值等操作,这些一般都是第三方SDK来完成。游戏研发一般只需进行简单的接入就可以使用登录充值功能了。我们来实现一个简单的游戏SDK:

1、创建外观角色。这里只要是封装游戏SDK对外的接口,供游戏去研发去调用。这里只有两个接口:登录和充值。

public class GameSdk {
  // 登录接口
  public void login() {
    // 调用登录子系统的接口
    LoginManager loginManager = new LoginManager();
    loginManager.login();
  }

  // 支付接口
  public void pay(int momey) {
    // 调用支付子系统的接口
    PayManager payManager = new PayManager();
    payManager.pay(momey);
  }
}

2、子系统

// 登录系统
public class LoginManager {
  public void login() {
    System.out.println("打开登录界面");
    System.out.println("进行登录操作");
    System.out.println("登录成功");
  }
}

// 支付系统
public class PayManager {
  public void pay(int momey) {
    System.out.println("生成订单信息");
    System.out.println("选择支付方式");
    System.out.println("支付成功:" + momey + "元");
  }
}

3、客户端测试:

private void test() {
  // 这里是游戏研发,通过调用login()和pay()就能调起登录和支付,无需关心支付是使用支付宝还是威信等,这是游戏SDK里面去做的事。
  GameSdk gameSdk = new GameSdk();
  gameSdk.login();
  gameSdk.pay(6);
}

输出结果:

打开登录界面
进行登录操作
登录成功
生成订单信息
选择支付方式
支付成功:6元

模式总结

应用场景

  • 为一个复杂的子系统提供一个简单接口,对外隐藏子系统的具体实现、隔离变化。
  • 使用外观模式可以将一个子系统和使用它的客户端以及其它的子系统分离开来,这就提高了子系统的独立性和可移植性。
  • 在构建一个层次化结构的时候,可以使用外观模式定义每一个层次对外交互的接口。这样,层与层之间只需要通过外观进行通信,从而简化层与层之间的依赖关系。

优点

  • 降低了客户端与子系统类的耦合度,实现了子系统与客户之间的松耦合关系。
  • 外观类对子系统的接口封装,使得系统更易于使用。
  • 提高灵活性,不管子系统如何变化,只要不影响门面对象,就可以自由修改。

缺点

  • 增加新的子系统可能需要修改外观类的源代码,违背了“开闭原则”。
  • 所有子系统的功能都通过一个接口来提供,这个接口可能会变得很复杂。

Android中的源码分析

外观模式在Android中应用也非常广泛,比如Context类,里面封装了很多方法,还是以startActivity()方法为例。实际上startActivity()是通过ActivityManagerService来实现的,ActivityManagerService我们应该都有耳闻,但是实际开发中一般都用不到,通过封装的方式,Context类隐藏了这些细节,我们只要简单调个方法就可以启动一个新的Activity
这就是外观模式在Android应用的例子了。当然这种应用比比皆是,我们平时开发也经常用的到。

相关文章

  • Android设计模式——外观模式(七大结构型)

    1.外观模式介绍 外观模式(Facade Pattern),是七大结构型设计模式之一。 外观模式运...

  • 设计模式[9]-外观模式-Facade Pattern

    1. 外观模式 外观模式(Facade Pattern),又称为门面模式,是非常常用的结构性设计模式。外观模式使得...

  • java设计模式-外观模式(Facade)

    外观模式,属于结构性模式。属于设计模式里面比较简单的设计模式,本人认为是最简单的设计模式。 所谓外观,就是我们能看...

  • 了解外观模式

    java 设计模式 ------外观模式 Java中一共有23种设计模式,每种设计模式各有特...

  • 设计模式之-4.外观模式

    每看一次设计模式,感觉每一个设计模式看起来是那么简单,对于外观模式我的理解就是外观模式:外观模式,这个名字起得不怎...

  • 设计模式详解——外观模式

    本篇文章介绍一种设计模式——外观模式。本篇文章内容参考《JAVA与模式》之门面模式,外观模式,深入浅出外观模式(二...

  • 外观模式(Facede)

    本文参考自: 《JAVA设计模式》之外观模式(Facade) 1. 作用 外观模式也叫门面模式,门面模式是对象的结...

  • 设计模式---外观模式

    1、外观模式(Facade):也叫门面模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个...

  • 设计模式——外观模式

    阎宏博士的《JAVA与模式》一书中开头是这样描述外观(Facade)模式的:门面模式是对象的结构模式,外部与一个子...

  • 设计模式--外观模式

    一、举个栗子小明每天回家都会先打开灯,空气净化器,电热水器烧上水,放上音乐,如果天气热的话,再打开空调。写成代码 ...

网友评论

    本文标题:《设计模式》外观模式

    本文链接:https://www.haomeiwen.com/subject/kovhectx.html