23、设计模式之适配器模式

接口

/**
 * 接口
 */
public interface IHandler {
    void request();
}

原有业务

/**
 * 表单提交
 */
public class RequestHandler implements IHandler{
    @Override
    public void request() {
        System.out.println("表单提交请求");
    }
}

通用执行器

/**
 * 通用执行器
 */
public class Handler {

    private IHandler handler;

    public Handler(IHandler handler) {
        this.handler = handler;
    }

    public void run(){
        handler.request();
    }
}

调用

public class Main {
    public static void main(String[] args) {
        // 表单提交请求处理器
        IHandler request = new RequestHandler();
        
        // 通用执行
        Handler handler = new Handler(request);
        System.out.print("【通用执行】【同步】");
        handler.run();

    }

}

执行结果


【通用执行】【同步】表单提交请求

现在新增业务:Ajax请求

/**
 * 异步提交,被适配对象
 */
public class AjaxRequestHandler {

    public void ajaxRequest(){
        System.out.println("Ajax请求");
    }
}

在通用执行器代码中,Handler构造函数接收IHandler接口实现类对象,然而新增业务并没有实现该接口,此时为了达到相同效果,适配器的作用就在于此,类如,插头和插座接口不同,就需要一个插座转换器来帮忙一样,适配器代码如下

/**
 * 适配器
 */
class RequestHandlerAdapter implements IHandler{

    private AjaxRequestHandler ajaxRequestHandler;

    public RequestHandlerAdapter(AjaxRequestHandler ajaxRequestHandler) {
        this.ajaxRequestHandler = ajaxRequestHandler;
    }

    @Override
    public void request() {
        ajaxRequestHandler.ajaxRequest();
    }
}

调用

public class Main {
    public static void main(String[] args) {
        // 表单提交请求处理器
        IHandler request = new RequestHandler();
        
        // Ajax提交请求处理器
        AjaxRequestHandler ajaxRequestHandler = new AjaxRequestHandler();
        
        // 适配器转化
        IHandler ajaxRequestAdapter = new RequestHandlerAdapter(ajaxRequestHandler);
        
        // 通用执行
        Handler handler = new Handler(request);
        System.out.print("【通用执行】【同步】");
        handler.run();

        handler = new Handler(ajaxRequestAdapter);
        System.out.print("【通用执行】【异步】");
        handler.run();

    }

}

执行效果

【通用执行】【同步】表单提交请求
【通用执行】【异步】Ajax请求

猜你喜欢

转载自blog.csdn.net/crystalcs2010/article/details/83508965