阅读 102

初识Spring Cloud系列——Spring Boot篇09|Java 开发实战

这是我参与更文挑战的第9天,活动详情查看: 更文挑战

本文正在参加「Java主题月 - Java 开发实战」,详情查看 活动链接

到了第九天了,也是该学学SpringBoot设计的设计模式最后一个适配器模式了,今天学完做一下总结,然后开启下一部分的学习咯,加油!!!

适配器模式 Adapter Pattern

意图:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

适配器两种模式结构

Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。 Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系。

Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码。

classDiagram
Target <|-- Adapter
Adaptee <|-- Adapter
Target : +request
class Adapter{
+request()
}
class Adaptee{
+request()
}

类适配器

存在一个将被适配的类(源类)Adaptee,,然后先定义一个目标接口Target,然后在目标接口中的 request() 调用 Adaptee 的 SpecificRequest() 方法,达到适配的目的

实现

public class AdapterPatternDemo {
    public static void main(String[] args) {
        Target mAdapter = new Adapter();
        mAdapter.request();
    }
}

//创建Target接口
interface Target {

    //这是源类Adaptee没有的方法
    public void request();
}
//创建源类
class Adaptee {

    public void SpecificRequest(){
        System.out.println("被适配者的方法");
    }
}

//创建适配器类
class Adapter extends Adaptee implements Target {

    //目标接口要求调用request()这个方法名,源类Adaptee没有方法request(),通过适配器补充上这个方法名
    //适配器将SpecificRequest()方法作一层封装,封装成Target可以调用的request()
    @Override
    public void request() {
        this.SpecificRequest();
    }

复制代码

结果

image.png

对象适配器

对象适配器与类适配器不同之处在于,类适配器通过继承来完成适配,对象适配器则是通过关联来完成

结果

public class AdapterPatternDemo {
    public static void main(String[] args) {
        Target mAdapter = new Adapter();
        mAdapter.request();
    }
}

//创建Target接口
interface Target {

    //这是源类Adaptee没有的方法
    public void request();
}
//创建源类
class Adaptee {

    public void SpecificRequest(){
        System.out.println("被适配者的方法");
    }
}

//对象适配器的核心实现
class Adapter implements Target{
    // 适配者是对象适配器的一个属性
    private Adaptee adaptee = new Adaptee();

    @Override
    public void request() {
        //...
        adaptee.SpecificRequest();
        //...
    }
}

复制代码

image.png

适配器模式与装饰器模式的区别

适配器模式主要作用是把一个类的接口转变成客户端可接收(识别)的接口,而装饰器模式主要作用是拓展被装饰类更多的功能

Java I/O中的适配模式

JAVA的IO类库中,将字符串数据转变成字节数据保存到文件中,将字节数据转变成流数据等。

在Spring中的应用

AOP和MVC中,都有用到适配器模式。

AOP中适配器的使用

AOP指的是在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式。 在AOP中,使用Advice(通知)来增强被代理类的功能,而Advie有多种类型(比如BeforeAdvice、AfterReturningAdvice、ThreowSadvice),每种Advie都有各自对应的拦截器(Interceptor),各种不同类型的Interceptor通过适配器对外提供统一的接口,比如 client ---> target ---> adapter ---> interceptor ---> advice。最终调用不同的advice来实现被代理类的增强

MVC中适配器的使用

DispatcherServlet中的doDispatch方法,将请求分发到具体的controller, 不过,controller的类型可能不一样,一般处理方法是if...else...,来对controller的类型进行判断 当新的controller加入,则又要增加额外的if...else...来判断

如何解决这样的问题?

spring定义了一个适配器接口,使得每一种Controller有一种对应的适配器实现类,让适配器代替controller执行相应的方法。这样在扩展Controller 时,只需要增加一个适配器类就完成了SpringMVC的扩展了。

今日小结

Spring Boot中设计的9大设计模式到目前基本简单多了一点,在Spring中的应用场景,有的模式涉及的比较少,有的较多,但并不全面,正所谓磨刀不误砍柴工,我觉得先了解一下设计模式的概念,有利于在接下来多Spring Cloud的学习,下一篇应该就是Spring Cloud相关应用的开始了。

文章分类
后端
文章标签