快捷搜索:  汽车  科技

设计模式3大特点:设计模式之外观模式

设计模式3大特点:设计模式之外观模式封装内部交互,让外部简化调用外观层的目的:外观模式为了让外部模块减少对内部子模块的交互,松散耦合,使外部更简单的使用功能。图2图2的抽象层即为外观层外观层定义:定义多个子模块的对外高层接口,统一对外提供聚合服务

场景案例

我们在做软件开发的时候会遇到这样的场景,模块A需要调用模块B、模块C、模块D去完成某项功能,那么对于模块A而言需要知道模块BCD分别是做什么的,然后才能调用各自的模块完成自己的功能,而且如果有其他模块也需要调用BCD模块完成功能的话,相对来说这么调用非常的繁琐。如图

设计模式3大特点:设计模式之外观模式(1)

图1

上述案例的问题点
  1. 调用复杂,需要了解各个模块的功能
  2. 无法形成通用聚合功能
  3. 如果被调用的模块发生了变化客户端也需要做相应的改变,耦合较大
如何解决

首先想到的是我们能不能抽象一个层出来,然后定义出一个接口,接口的实现分别调用模块BCD呢?这样的话,其他模块如果要实现同样功能的时候,直接调用这个层是不是就可以了呢?

如图2

设计模式3大特点:设计模式之外观模式(2)

图2

图2的抽象层即为外观层

目的

外观层定义:定义多个子模块的对外高层接口,统一对外提供聚合服务

外观层的目的:外观模式为了让外部模块减少对内部子模块的交互,松散耦合,使外部更简单的使用功能。

优缺点
  1. 优点
    1. 简单易用
    2. 增加复用性
    3. 软件层次分明
    4. 松耦合
  2. 缺点
    1. 需要合理的归纳总结,对于初级开发者或者业务不是很了解的者稍微有些难
    2. 增加层次
外观模式的本质

封装内部交互,让外部简化调用

代码

不使用外观模式

public void testA(){ testB(); testC(); testD(); } public void testF(){ testB(); testC(); testD(); }

使用外观模式

void testA(){ testB(); testC(); testD(); } void testFacede(){ testB(); testC(); testD(); }

猜您喜欢: