设计模式之外观模式

一、外观模式

所谓的外观模式,即一个门面类,门面类负责和各个子系统之间交互,执行相应的交互逻辑,客户端直接与门面类交互,使得客户端与各子系统之间隔离。对于子系统繁多,业务复杂的场景很实用,从上面的解释中也看到了外观模式是迪米特原则一个很好的应用,其秉承着客户端最少知道的思想。

二、业务场景

假设一个网站做活动,需要添加积分兑换礼物的业务,积分兑换礼物主要分三个模块,一个是资格校验(看一个人拥有的积分是否能获得相应的礼物),二是用积分交换礼物(积分交换礼物后,对积分进行从计算),三是兑换成功的礼物加入到物流系统并得到订单号。这里我们可以使用外观模式,设计一个兑换礼物的外观类,让外观类处理礼物兑换过程中的逻辑,留一个简单的接口给客户端调用即可。具体代码如下:

 

从上面的类图可以看出这严格来说算不上绝对的外观模式,外观模式应该与子系统之间完全解耦合,但是类图显示客户端不仅与门面类存在依赖关系,还与各系统之间存在着依赖关系,由于上面是模拟的,我们需要在客户端Test类中创建各系统的对象,做下面一个小小的修改,假设各子系统对象在门面对象初始化时就已经创建好:

修改后会出现上面这个类图,这就非常符合外观模式了。我们在这里实现的门面类没采用抽象的形式,如果系统需要修改与子系统的交互逻辑,只能修改门面类,这样违背了开闭原则。如果系统业务逻辑比较稳定,长时间不会变化,这样实现是可以的,如果系统业务逻辑变化比较快,我们可以写一个抽象类,让门面类继承该抽象类,实现不同的逻辑就继承该抽象类重写方法,这样系统的扩展性就比较强,符合迪米特原则的同时也符合开闭原则。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值