设计模式之外观模式

1.简要概述

  • 外观模式也叫作过程模式,通过定义一个高度抽象的接口,将复杂的过程进行封装,使其更加容易扩展和维护。
  • 外观模式为子系统提供统一的入口,封装子系统的复杂性,用以屏蔽子系统内部的细节,使得调用端只需和这个统一的访问入口发生联系,而无需关心子系统内部的实现。

2.模式结构

👉通常由一个外观类( 负责为调用端提供统一的调用接口,将请求代理给指定的子系统对象 ),多个子系统( 负责完成特定任务的子模块,是具体功能的实现者 ),一个客户类( 负责对外观类进行调用,完成指定功能)共同组成。

请添加图片描述

3.实现代码

举例 💡 :假设我们现在要去注册一个公司,那么我们就需要分别去工商局、税务局、银行进行相关业务办理,那么整个业务办理的流程我们就可以对其进行封装,然后提供一个统一的访问入口进行调用,此时我们就可以使用外观模式进行处理。

工商局(子系统1)

public class SubSystem1 {
    public static void doBusiness(){
        System.out.println("工商局业务办理");
    }
}

税务局(子系统2)

public class SubSystem2 {
    public static void doBusiness(){
        System.out.println("税务局业务办理");
    }
}

银行(子系统3)

public class SubSystem3 {
    public static void doBusiness(){
        System.out.println("银行业务办理");
    }
}

公司(外观类)

public class Company {
    public void register() {
        System.out.println("进行公司注册,执行下面流程...");
        SubSystem1.doBusiness();
        SubSystem2.doBusiness();
        SubSystem3.doBusiness();
    }
}

客户类

// 测试客户端
public class CompanyClient{
    public static void main(String[] args) {
        Company company = new Company();
        company.register();
    }
}

4.优点好处

  • 降低了客户端对子系统处理的复杂性,因为屏蔽了子系统的实现细节。
  • 提高了系统的扩展性和可维护性,实现了客户端与子系统之间的解耦。
  • 通过合理的使用外观模式,可以帮助我们更好的发奋访问层次。

5.缺点弊端

  • 不能很好地限制客户端对子系统的使用。
  • 外观模式将子系统封装起来,我们无法修改子系统,只能外部扩展。所以不符合开闭原则,对修改关闭,对扩展开放。

6.应用场景

  • 当系统需要进行分层设计的时候使用。
  • 当客户端直接访问子系统来处理某种业务很复杂的时候使用。
  • 当维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互的时候使用。

7.应用示例

Mybatis源码中的Configuration类创建MetaObject对象的过程

请添加图片描述

请添加图片描述

请添加图片描述

从上面的代码中可以看出,在Configuration类中聚合了ReflectorFactory、ObjectFactory、ObjectWrapperFactory三个类的对象,并在创建MetaObject对象时进行了调用。所以整个过程用类图表示如下:

请添加图片描述

从上图可以看出,Configuration类就好比是外观类,DefaultReflectorFactory、DefaultObjectFactory、DefaultObjectWrapperFactory三个类就好比是三个子系统,我们客户端只需通过调用Configuration类中的newMetaObject方法,即可完成对象的创建,而不需要了解内部实现细节,所以符合外观模式。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小吉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值