结构型:
十八、Facade,外观模式:为子系统中的一组接口提供一致的界面,facade
提供了一高层接口,这个接口使得子系统更容易使用。
如果没有外观模式统一封装,假设客户端现在需要调用下单服务-->支付服务-->积分服务。那么需要调用3次,但是客户端其实不关心服务端内部做了些什么事,那么就需要使用外观模式来统一封装这些后台服务。
订单服务
package com.figo.designpatterns.service.impl;
/**
* @ClassName:OrderServiceImpl
* @PackageName:com.figo.designpatterns.service.impl
* @Description:下单服务
* @Date:2023/7/4 9:39
* @Author:figo
*/
public class OrderServiceImpl {
public void addOrder(String orderJson)
{
System.out.println("新增订单");
}
}
支付服务
package com.figo.designpatterns.service.impl;
/**
* @ClassName:PayServiceImpl
* @PackageName:com.figo.designpatterns.service.impl
* @Description:订单支付
* @Date:2023/7/4 9:42
* @Author:figo
*/
public class PayServiceImpl {
public void pay(String orderJson){
System.out.println("完成支付");
}
}
积分服务
package com.figo.designpatterns.service.impl;
/**
* @ClassName:PointsServiceImpl
* @PackageName:com.figo.designpatterns.service.impl
* @Description:支付完成增加用户积分
* @Date:2023/7/4 9:40
* @Author:figo
*/
public class PointsServiceImpl {
public void addPoint(String orderJson){
System.out.println("新增积分");
}
}
服务外观层
package com.figo.designpatterns.facade;
import com.figo.designpatterns.service.impl.OrderServiceImpl;
import com.figo.designpatterns.service.impl.PayServiceImpl;
import com.figo.designpatterns.service.impl.PointsServiceImpl;
/**
* @ClassName:OrderFacade
* @PackageName:com.figo.designpatterns.facade
* @Description:外观模式,调用者不需要知道内部实现
* @Date:2023/7/4 9:44
* @Author:figo
*/
public class OrderFacade {
/**
* 外观模式,封装了下单,支付,积分等服务
*/
public void order(String orderJson)
{
//先订单表增加订单
OrderServiceImpl orderService=new OrderServiceImpl();
orderService.addOrder(orderJson);
//再完成支付
PayServiceImpl payService=new PayServiceImpl();
payService.pay(orderJson);
//新增积分
PointsServiceImpl pointsService=new PointsServiceImpl();
pointsService.addPoint(orderJson);
}
}
客户端调用
package com.figo.designpatterns;
import com.figo.designpatterns.facade.OrderFacade;
import com.figo.designpatterns.factory.AppleFactory;
import com.figo.designpatterns.factory.StaticFactory;
import com.figo.designpatterns.model.Apple;
import com.figo.designpatterns.model.Fruit;
/**
* @ClassName:DesignPatternTest
* @PackageName:com.figo.designpatterns
* @Description:客户端调用后台接口
* @Date:2023/5/15 20:40
* @Author:figo
*/
public class DesignPatternTest {
public static void main(String[] args) {
/**
* 3.外观模式
*/
OrderFacade orderFacade=new OrderFacade();
String orderJson="{'orderId':'000000000001','merchantId':'800000000001','orderAmount':'100'}";
orderFacade.order(orderJson);
}
}