Java简化复杂系统调用的门面设计模式
作者:.番茄炒蛋 发布时间:2023-06-08 10:38:28
介绍
Java门面模式(Facade Pattern)是一种结构型设计模式,它提供了一个简单的接口,隐藏了复杂系统的实现细节,使得客户端可以更加容易地使用系统.
在Java门面模式中,一个门面对象(Facade)提供了一个简单的接口,该接口包装了一个或多个复杂的子系统,客户端可以直接使用门面对象来访问子系统,而无需直接与子系统交互,门面对象将客户端的请求转发到适当的子系统对象,然后将子系统对象的响应返回给客户端.这样,客户端就不需要知道子系统内部的细节,也不需要与多个子系统对象进行交互,从而降低了系统的复杂性和耦合性.
门面模式有以下两种角色:
门面(Facade)角色:门面角色是整个门面模式的核心,它提供了一个简单的接口,隐藏了系统的复杂性.门面角色知道将客户端请求发送给那些子系统对象,如何将这些请求转发给子系统对象,以及如何将子系统对象的响应返回给客户端.
子系统(Subsystem)角色:子系统角色是实现系统功能的各个部分.子系统角色是与门面角色相对应的,它们是门面角色所封装的具体功能实现.子系统角色处理门面角色传递过来的请求,并返回处理结果.
实现
假设有一个在线购物系统,其中包含了库存管理,订单管理和支付管理等多个子系统.现在需要对这些子系统进行封装,提供了一个简单的接口给客户端使用.这时就可以使用Java门面模式来实现.
首先定义一个订单类
@Data
public class Order {
private String itemId;
private int quantity;
public Order(String itemId, int quantity) {
this.itemId = itemId;
this.quantity = quantity;
}
}
然后定义子系统角色
public class InventoryManagement {
/**
* 检查库存
*
* @param itemId
* @param quantity
* @return
*/
public boolean checkInventory(String itemId, int quantity) {
System.out.println("检查库存");
return true;
}
}
public class OrderManagement {
/**
* 创建订单
*
* @param itemId
* @param quanitity
* @return
*/
public Order createOrder(String itemId, int quanitity) {
System.out.println("创建订单");
return new Order(itemId, quanitity);
}
}
public class PaymentManagement {
/**
* 支付订单
*
* @param order
* @param paymentMethod
*/
public void makePayment(Order order, String paymentMethod) {
System.out.println("支付订单");
}
}
最后定义门面类,作为整个门面模式的核心
public class OnlineShoppingFacade {
private InventoryManagement inventoryManagement;
private OrderManagement orderManagement;
private PaymentManagement paymentManagement;
public OnlineShoppingFacade(InventoryManagement inventoryManagement, OrderManagement orderManagement, PaymentManagement paymentManagement) {
this.inventoryManagement = inventoryManagement;
this.orderManagement = orderManagement;
this.paymentManagement = paymentManagement;
}
/**
* 下单操作
*
* @param itemId
* @param quantity
* @param paymentMenthod
*/
public void placeOrder(String itemId, int quantity, String paymentMenthod) {
System.out.println("开始处理下单操作...");
boolean checkInventory = inventoryManagement.checkInventory(itemId, quantity);
if (!checkInventory) {
throw new RuntimeException("库存不足");
}
Order order = orderManagement.createOrder(itemId, quantity);
paymentManagement.makePayment(order, paymentMenthod);
}
}
测试
public class Demo {
public static void main(String[] args) {
OnlineShoppingFacade onlineShoppingFaced = new OnlineShoppingFacade(new InventoryManagement(),
new OrderManagement(),
new PaymentManagement());
onlineShoppingFaced.placeOrder("123",3,"Wechat");
}
}
在这个示例中,我们创建了一个门面类OnlineShoppingFacade,该门面类封装了库存管理,订单管理和支付管理三个子系统对象.客户端只需要使用OnlineShoppingFacade类提供得placeOrder()方法,就可以完成下单操作.通过这种方式,我们将整个下单过程封装在OnlineShoppingFacade门面类中,使得客户端无需了解底层子系统对象得实现细节,只需要调用门面类提供得方法即可完成操作.这样,我们就实现了一个简单的Java门面示例.
来源:https://blog.csdn.net/qq_43135259/article/details/129624402


猜你喜欢
- 今天来写一个通用的筛选栏的实现,也是因为之前项目中要好多地方用到筛选栏这么个东西,所以为了之后用起来比较方便,就简单的做了一些封装.废话不多
- 一、why(为什么要用Hibernate缓存?)Hibernate是一个持久层框架,经常访问物理数据库。为了降低应用程序对物理数据源访问的频
- 枚举是 C# 中最有意思的一部分,大部分开发人员只了解其中的一小部分,甚至网上绝大多数的教程也只讲解了枚举的一部分。那么,我将通过这篇文章向
- 方法一:using System;using System.Collections.Generic;using System.Compon
- 本文实例讲述了Java Socket实现单线程通信的方法。分享给大家供大家参考,具体如下:现在做Java直接使用Socket的情况是越来越少
- using System;using System.Collections.Generic;using System.IO;using Sy
- 菜单控制:可以用来判断这个用户是不是有这些角色,没有的话就不展示数据控制:由于数据都是从后端查的,在后端控制权限就可以了<!-- &n
- 单例模式大概是所有设计模式中最简单的一种,如果在面试时被问及熟悉哪些设计模式,你可能第一个答的就是单例模式。单例模式的实现分为两种:饿汉式和
- 为了避免直接进入项目中存在的页面,使用filter过滤器新建一个类loginFilter:package com.tjcu.filter;i
- 关于Android实现文字上下滚动这个功能,我目前有两种方法实现: 一个是在TextView 中加上翻转的动画效果,然后设置循环滚动;一种是
- 在开发中,我们会遇到将不同组织架构合并成tree这种树状结构,那么如果做呢?实际上,我们也可以理解为如何将拥有父子关系的list转成树形结构
- using System; using System.IO; using System.Threading; using System.Wi
- 使用adb or fastboot命令进入高通的9008(edl)模式已经有人写过了,下面两种是其中之一,我再加一个如题,两种方法1. ad
- 今天给大家带来的是仅仅使用一个TextView实现一个 * 京东、淘宝、唯品会等各种电商APP的活动倒计时。最近公司一直加班也没来得及时间去整
- 错误详情:java.lang.NoSuchMethodException: [Lorg.springframework.web.multip
- 一、项目运行环境配置:Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe
- 一. 引入相关jar包首先,我们先在idea里创建出一个Maven项目出来,除了路径要填成自己的希望路径以外,其他都可以一路next和fin
- 前言集合是Java开发日常开发中经常会使用到的。关于集合类,《阿里巴巴Java开发手册》中其实还有另外一个规定:本文就来分析一下为什么会有如
- 手把手教你用C#开发Android应用程序的方法和流程摘要:用C#能开发RFID-android吗?C#真的能开发android程序吗?C#
- 最近做的项目,需要将一些信息导出到word中。在网上找了好多解决方案,现在将这几天的总结分享一下。目前来看,java导出word大致有6种解