栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

适配器模式代码重构

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

适配器模式代码重构

源码(MethodBeforeAdviceInterceptor):

public class MethodBeforeAdviceInterceptor implements MethodInterceptor, BeforeAdvice, Serializable {
    private final MethodBeforeAdvice advice;

    public MethodBeforeAdviceInterceptor(MethodBeforeAdvice advice) {
        Assert.notNull(advice, "Advice must not be null");
        this.advice = advice;
    }

    public Object invoke(MethodInvocation mi) throws Throwable {
        this.advice.before(mi.getMethod(), mi.getArguments(), mi.getThis());
        return mi.proceed();
    }
}

源码(MethodBeforeAdviceAdapter):

class MethodBeforeAdviceAdapter implements AdvisorAdapter, Serializable {
    MethodBeforeAdviceAdapter() {
    }

    public boolean supportsAdvice(Advice advice) {
        return advice instanceof MethodBeforeAdvice;
    }

    public MethodInterceptor getInterceptor(Advisor advisor) {
        MethodBeforeAdvice advice = (MethodBeforeAdvice)advisor.getAdvice();
        return new MethodBeforeAdviceInterceptor(advice);
    }
}

适配器模式案例:

package com.jt.test;

interface PowerPlug{

    void work();
}
class Usb{

    public void transferPower() {
        System.out.println("usb线可以正常充电了");
    }
}
class TwoHeadPowerLine implements PowerPlug{
    private Usb usb;

    public TwoHeadPowerLine(Usb usb) {
        this.usb = usb;
    }

    @Override
    public void work() {
        usb.transferPower();
    }
}
class Power{
    void providePower(PowerPlug powerPlug){
        powerPlug.work();
    }
}
class Adapter{
    PowerPlug getPowerPlug(Usb usb){
        return new TwoHeadPowerLine(usb);
    }
}
public class PluginTest {
    public static void main(String[] args) {
        Power power=new Power();
        Usb usb=new Usb();
        Adapter adapter=new Adapter();
        power.providePower(adapter.getPowerPlug(usb));
    }
}

我们知道了解设计模式会提高我们读源码的效率,所以我们要看spring的设计模式,这样可以方便我们更深刻、更灵活的理解spring框架的运行机制。

我自己写的这个适配器的案例,是以插头和usb充电线为例重构了一遍适配器模式的使用流程和运行的机制。

1.适配器模式的分析:

从充电插座和usb充电线这个案例上来看,显而易见,usb充电线是没办法直接插在插座上充电的,所以需要一个头子(就是转接头),我们把usb线插在转接头上,而头子是可以插在插座上的,这样我们就可以用usb充电线充电了。

2.思路的扩展:

以上的这种生活中的常识,在代码中也得到了运用,这就是适配器模式。

在(Java)开发过程中,假如有这样一个场景,客户(或者说一个框架)给我们提供了一个工具类,在运用这个类中的某个方法的时候,指定要给这个方法传递一个特定类型的参数,而现在我们能够提供的却是另外一种类型的对象,此时我们就需要有一个适配器(相当于一个转接头),通过这个适配器可以把现有的这个对象转换成那个方法所需要的类型。这样就叫适配,我们给方法提供了她所需要的参数,让这个方法可以正常运行。

在这个过程中最关键的适配器把usb转换成指定类型的过程,我们可以把这个过程看作是在封装,把现有的对象封装在另一个指定类型的对象中,而在这个过程中,不仅仅要包装原来的那个对象,还要包装原来的行为,所以这个新的转换出来的对象的行为就继承了原来的对象中的行为。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/434416.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号