Java设计模式(二十一)—— 外观模式

        外观模式是指为系统中的一组接口提供一个一致的界面,通过定义一个高层接口,使得这一子系统更加容易使用。外观模式隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性设计模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。

适合外观模式的情景如下:

  • 对于一个复杂的子系统,提供一个简单的交互操作
  • 不希望客户代码和子类中的类耦合

示例:

冰箱由冷冻室和冷藏室构成,其中,冷冻室和冷藏室都有初始化、运行、关机三个主要过程。

public class Container {
    public void init(){
        System.out.println("container init");
    }
    public void run() {
        System.out.println("container run");
    }
    public void shutdown() {
        System.out.println("container shutdown");
    }
}
class Freezer{
    public void init(){
        System.out.println("Freezer init");
    }
    public void run() {
        System.out.println("Freezer run");
    }
    public void shutdown() {
        System.out.println("Freezer shutdown");
    }
}

如果要实现冰箱运行仿真全过程功能,可能会有人这样写:

public class Test {
    public static void main(String[] args) {
        Container c = new Container();
        Freezer f = new Freezer();
        c.init();
        f.init();
        c.run();
        f.run();
        c.shutdown();
        f.shutdown();
    }
}

使用外观模式改进:

只需增加一个冰箱类即可

在该类中:冰箱初始化是由冷藏室、冷冻室两部分功能类组成。冰箱运行、关机也是如此。该类也叫外观类。

public class Refrigerator {
    Container c = new Container();
    Freezer f = new Freezer();
    public void init() {
        c.init();
        f.init();
    }
    public void run() {
        c.run();
        f.run();
    }
    public void shutdown() {
        c.shutdown();
        f.shutdown();
    }
}

测试类:

public class Test1 {
    public static void main(String[] args) {
        Refrigerator r = new Refrigerator();
        r.init();
        r.run();
        r.shutdown();
    }
}

结果:

container init
Freezer init
container run
Freezer run
container shutdown
Freezer shutdown

从测试类可以看出,我们只知道冰箱初始化,但冰箱包含几部分,哪些部分初始化,我们是不知道的,因为它们都由外观类Refrigerator封装了。同理运行、关机也如此。

外观模式各个角色描述如下:

  • Facade:门面角色,外观模式的核心。它被客户角色调用,熟悉子系统的功能。内部根据客户角色的需求预定了几种功能的组合,本例中的 Refrigerator
  • Subsystem:子系统角色,实现了子系统的功能。它对客户角色和Facade是未知的。它内部可以由系统内的相互交互,也可以供外界调用的接口。本例中的 冷藏室冷冻室
  • Client:客户角色,通过调用Facede来完成要实现的功能。

外观模式在springboot中的应用:

在Spring Boot中,外观模式(Facade Pattern)通常用于简化与框架或库的交互。

一个典型的例子是Spring Boot的WebMvcConfigurer接口。在使用Spring MVC时,通常需要许多配置和自定义选项,例如添加自定义拦截器、消息转换器、异常处理器等。但是,将这些选项直接添加到WebMvcConfigurer接口中可能会导致代码混乱和难以维护。

因此,Spring Boot使用外观模式,提供了一个WebMvcConfigurerAdapter类,该类允许开发人员通过覆盖一些简单方法来完成配置,而不必直接修改复杂的WebMvcConfigurer接口。

另一个例子是Spring Boot的JdbcTemplate类,该类是用于与数据库交互的简单模板类。JdbcTemplate隐藏了所有与JDBC API相关的细节,并提供了简单的方法来执行SQL查询和更新。通过这种方式,JdbcTemplate充当了一个外观,简化了与数据库的交互。

因此,在Spring Boot中,外观模式被广泛应用于简化与框架和库的交互。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小小印z

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

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

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

打赏作者

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

抵扣说明:

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

余额充值