设计模式(五):外观模式(结构型模式)

结构型:
十八、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);

    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值