【源码分析设计模式 10(1),springmvc面试问题

适配器这个词我们应该很熟悉,天天都在使用,手机充电时,电源线头头就叫电源适配器,干什么用的呢?把220V电压转换成手机充电时使用的电压,那么适配器是不是很好理解了,下面看一下定义。

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

适配器模式有“类适配器”和“对象适配器”两种不同的形式。

二、适配器模式的结构


1、目标(Target)

定义一个客户端使用的特定接口。

2、客户端(Client)

使用目标接口,与和目标接口一致的对象合作。

3、被适配者(Adaptee)

一个现存需要适配的接口。

4、适配器(Adapter)

负责将Adaptee的接口转换为Target的接口。适配器是一个具体的类,这是该模式的核心。

三、适配器模式的优缺点


1、优点

  • 可以让任何两个没有关联的类一起运行;

  • 增加了类的透明性;

  • 提高了类的复用度;

  • 灵活性非常好;

2、缺点

  • 过多使用适配器会使系统非常凌乱;

  • 由于java是单继承的,所以只能适配一个适配器类,而且目标类必须是抽象的;

  • 只有碰到无法改变原有设计和代码的情况下,才会考虑适配器模式;

四、适配器模式的使用场景


1、系统需要使用现有的类,从而类的接口不符合系统的需要。

2、想建立一个可以重复使用的类,用于一些彼此之间没有太大关联的一些类。

3、通过接口转换,将一个类插入另一个类中。

五、类适配器


通过继承进行适配(类间继承)。URL结构图如下:

1、Target

Target目标角色,该角色定义把其它类转换成期望接口,通常情况下是一个接口或一个抽象类,一般不会是实现类。


public interface Target {   

    public void request();

}

2、Adaptee

Adaptee源角色,想把谁转换为目标角色,这个“谁”就是源角色,它是已经存在的、运行良好的类或对象。


public class Adaptee {

    public void specificRequest() {

        System.out.println("特殊请求");

    }

}

3、Adapter

Adapter适配器角色,是适配器模式的核心角色,它的职责是通过继承或类关联的方式把源角色转换成目标角色。


public class Adapter extends Adaptee implements Target {

    @Override

    public void request() {

        super.specificRequest();

    }

}

4、ConcreteTarget


package designMode.adapter.sxn;

 

public class ConcreteTarget implements Target {

    @Override

    public void request() {

        System.out.println("普通请求");

    }

}

5、测试类


package designMode.adapter.sxn;

 

public class Client {

    public static void main(String[] args) {

        //原有业务逻辑

        Target target = new ConcreteTarget();

        target.request();

 

        //增加适配器后的业务逻辑

        Target target2 = new Adapter();

        target2.request();

    }

}

6、控制台输出

六、对象适配器


通过对象层次的关联关系进行委托(对象的合成关系/关联关系)。UML结构图如下:

1、Target

客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。


package designMode.adapter.sxn;

 

public class Target {

    public void request() {

        System.out.println("普通请求");

    }

}

2、Adaptee

需要适配的类。


package designMode.adapter.sxn;

 

public class Adaptee {

    public void specificRequest() {

        System.out.println("特殊请求");

    }

}

3、Adapter

通过在内部包装一个Adaptee对象,把源接口转换成目标接口。


package designMode.adapter.sxn;

 

public class Adapter extends Target{

    private Adaptee adaptee = new Adaptee();

 

    @Override

    public void request() {

        adaptee.specificRequest();

    }

}

4、测试类


package designMode.adapter.sxn;

 

public class Client {

    public static void main(String[] args) {

        Target target = new Adapter();

        target.request();

    }

}

5、控制台输出

七、适配器模式在SpringMVC框架应用的源码剖析


1、SpringMVC中的HandlerAdapter使用了适配器模式;

2、使用HandlerAdapter的原因分析

总结

虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。

上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料

CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

2、使用HandlerAdapter的原因分析

总结

虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。

[外链图片转存中…(img-4ZcUZYoV-1630928267632)]

[外链图片转存中…(img-R3VFq0hO-1630928267633)]

上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料

CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值