立面设计模式–设计观点

在上一篇文章中,我们描述了适配器设计模式 。 在今天的文章中,我们将展示另一种类似的“四结构帮派”模式 。 顾名思义,结构模式用于从许多不同的对象形成更大的对象结构。 外观模式就是这样一种模式,它为系统内的一组接口提供了简化的接口,因此对客户端隐藏了子系统的复杂性。

何时使用外墙图案?

分层:外观模式可以在JEE应用程序中用于创建一个层,以抽象和统一应用程序中的相关接口。 使用外观将为每个子系统级别定义一个入口点,从而使它们只能通过其外观进行通信。 这样可以简化它们之间的依赖关系。

Façade使API和库更易于使用,有利于维护和可读性。 它还可以使用单个简化的API整理和抽象各种设计不当的API。

它还减少了外部代码对库内部工作的依赖性,从而提供了灵活性。

立面设计图案结构

在上述Façade模式的结构中,Façade类将子系统与客户端隔离。 客户端仅与Façade类进行交互,而无需了解子系统类。

例:

让我们以在线订单处理网站为例。 客户在不了解内部类如何工作的情况下下了订单。 下订单后,外观类层将调用子系统的方法(例如,用于库存检查的“库存”和用于处理付款的“付款”)。 处理后,它将控制返回给客户端类,并带有关于正在处理的订单的确认。

顺序图:

外墙设计顺序图

代码示例:

Inventory.java –

public class Inventory {
	public String checkInventory(String OrderId) {
		return 'Inventory checked';
	}
}

Payment.java

public class Payment {
	public String deductPayment(String orderID) {
		return 'Payment deducted successfully';

	}
}

OrderFacade.java

public class OrderFacade {
	private Payment pymt = new Payment();
	private Inventory inventry = new Inventory();

	public void placeOrder(String orderId) {
		String step1 = inventry.checkInventory(orderId);
		String step2 = pymt.deductPayment(orderId);
		System.out
				.println('Following steps completed:' + step1 
						+ ' & ' + step2);
	}
}

客户端程序

public class Client {
  public static void main(String args[]){
	  OrderFacade orderFacade = new OrderFacade();
	  orderFacade.placeOrder('OR123456');
	  System.out.println('Order processing completed');
  }
}


优点:

  • 我们可以使用façade模式来整理所有复杂的方法调用和相关的代码块,并将其通过一个单独的Façade类进行通道化。 这样,对于客户而言,只有一个呼叫。 即使我们更改了子系统包/类及其逻辑,也不会影响客户端调用。 简而言之,这增加了松散的耦合。
  • 它使创建和使用更加结构化的环境变得更加容易使用和维护,并减少了库或其他软件包之间的依赖性。


缺点/后果:

  • 缺点之一是子系统方法连接到Façade层。 如果子系统的结构发生变化,则需要随后对Façade层和客户端方法进行更改。


有趣的一点:

外墙样式可能与调解人样式混淆。 中介器还以类似于外观的方式抽象了子系统的功能。 但是,这两种模式之间存在细微的差异。 在中介程序模式的情况下,子系统知道中介程序,但是在立面的情况下,子系统对立面一无所知。 这是从Façade到子系统的一种单向通信。

Java API中使用的外观

  • javax.servlet.http.HttpSession
  • javax.servlet.http.HttpServletRequest
  • javax.servlet.http.HttpServletResponse
  • javax.faces.context.ExternalContext


参考:立面 设计模式–来自我们的JCG合作伙伴 Mainak Goswami在Idiotechie博客上的设计观点

翻译自: https://www.javacodegeeks.com/2012/11/facade-design-pattern-design-standpoint.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值