设计模式—外观模式

一、模式介绍

外观模式(Facade Pattern)是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。

隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。

意图:为子系统中的一组接口提供一个一致的界面。

图 用户订单管理

商城系统,当用户创建订单的时候,支付系统处理支付,商品系统设置商品库存,配送系统处理发货,订单系统来生产订单数据。一个“下单”操作需要这几个系统同时工作,内部业务流程会比较复杂。 我们借助外观模式,创建一个响应用户订单操作接口的外观类,当用户执行操作时,只需调用相关接口就可以。 商城其他系统的协调及业务处理由外观类进行管理。

图 外观模式UML图

1.1 代码说明

需求描述:证券公司研报管理平台,分析师在提交一份研报后,系统需要对研报进行合规检查,合规检查通过后,需要使这篇研报进入审批流程,最后需要短信通知用户,表明研报提交成功。

图 研报系统相关类

public class FacadeTest {

    /** 合规系统 */
    static class CheckService {
        /** 合规检查 */
        public boolean check(String report) {
            if (report == null) return false;
            return report.length() % 2 == 0;
        }
    }

    /** 审批流系统 */
    static class FlowService {
        public void createFlow(String report) {
            System.out.println("《" + report + "》进入审批流程");
        }
    }

    static class SmsService {
        public void sendSms(String report, boolean isOk) {
            if(isOk) System.out.println("恭喜您,您的报告《" + report + "》提交成功");
            else System.out.println("您的报告《" + report + "》合规检查不通过");
        }
    }

    static class ReportService {
        private CheckService checkService = new CheckService();
        private FlowService flowService = new FlowService();
        private SmsService smsService = new SmsService();

        public void submitReport(String report) {
            boolean check = checkService.check(report);
            if (check) {
                flowService.createFlow(report);
            }
            smsService.sendSms(report,check);
        }
    }

    public static void main(String[] args) {
        ReportService reportService = new ReportService();
        reportService.submitReport("炒股不能实现财富自由");
        System.out.println("----------------");
        reportService.submitReport("撸起袖子加油干!");
        System.out.println("----------------");
        reportService.submitReport("美股疯长!");
        //运行结果
        //《炒股不能实现财富自由》进入审批流程
        //恭喜您,您的报告《炒股不能实现财富自由》提交成功
        //----------------
        //《撸起袖子加油干!》进入审批流程
        //恭喜您,您的报告《撸起袖子加油干!》提交成功
        //----------------
        //您的报告《美股疯长!》合规检查不通过
    }

}

1.2 优缺点

优点:1)实现类子系统与客户端直接松耦合关系。

2)客户端屏蔽了子系统组件,使得子系统使用起来更加容易。

缺点:1)不符合开闭原则,扩展子系统时,需要做出相应修改。

2)子系统扩展风险,系统内部扩展子系统时,容易产生风险。

二、应用场景

1)为复杂的模块或子系统提供外界访问的模块。

2)Java 三层开发模式。

3)维护一个大型遗留系统,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值