设计模式之外观模式
Posted ProChick
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之外观模式相关的知识,希望对你有一定的参考价值。
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方法,即可完成对象的创建,而不需要了解内部实现细节,所以符合外观模式。
以上是关于设计模式之外观模式的主要内容,如果未能解决你的问题,请参考以下文章