外观模式(Facade Pattern)

一、简述

Facade 模式将子系统中的各类(或结构与方法)包装成一个简明一致的界面,目的就是想对外部用户隐藏系统、模块和类的复杂性,提供给用户一个简单易用的使用接口,使子系统更加容易使用。它是为子系统中的一组接口所提供的一个一致的界面。Facade模式结构

二、作用及应用场景

1️⃣作用

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

2️⃣应用场景

  1. 为复杂系统提供简单的接口。
  2. 客户程序与抽象类的实现部分分离。
  3. 构建层次系统时,用作入口。
  4. Facade 一个典型应用就是数据库 JDBC 的应用。

三、示例

OrderService 封装了操作 Order 的相关逻辑(增删改查),在目前的系统中运行良好。现在有一个新的需求,外部其他模块(或其他系统)需要查询订单的信息,如果将 OrderService 全部暴露出去,会带来风险,比如其他系统可能会将订单删除。此时可以使用 Facade 模式,只提供客户需要的操作。

URL类图

系统中的已有逻辑类:

public class OrderService {
    public void add(Order order) {
        System.out.println("add order: " + order);
    }
    public void delete(String orderId) {
        System.out.println("delete order: " + orderId);
    }
    public void modify(Order order) {
        System.out.println("modify order: " + order);
    }
    public Order query(String orderId) {
        System.out.println("load order: " + orderId);
        return new Order();
    }
}

提供给外部客户使用的查询类:

public class OrderQueryServiceFacade {
    @Resource
	private OrderService orderService;
	public OrderQueryServiceFacade(OrderService orderService) {
		super();
		this.orderService = orderService;
	}
	/*
	 * 这里是需要暴露的操作,不一定与原接口相同。比如下面的 queryById
	 */
	public Order query(String orderId) {
		return this.orderService.query(orderId);
	}
	public Order queryById(String orderId) {
		return this.query(orderId);
	}
}

这是一个简单的例子,简单到只是隐藏了类的一些操作。更多 Facade 应用场景是隐藏整个系统(模块)的复杂性,对外部提供一个简单的操作界面。
比如,电子商务系统中,商品管理系统,涉及下游其他系统(比如说移动应用)关心的所有信息。移动应用可能仅仅是需要查询某些商品的信息(库存量、描述信息等),如果直接和系统内部交互,复杂不说,也是不安全的,这时候可以单独提供一个商品中心的门面出来(具体实现可以采用:RMI、Hessian 或者 Web Service)。这样下游系统就只需要与这个门面进行交互,而不必关心商品管理系统内部的复杂度了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JFS_Study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值