• 接口作为方法的返回值


    1.接口

    RequestType 是泛型,不是具体的类
    T 也是泛型,不是具体类,只是这个泛型必须extends CloudResult

    public interface CloudClient<RequestType, T extends CloudResult> {
    
        CloudResponse<T> describe(RequestType request);
    
    }
    

    2.抽象方法返回接口

    protected abstract CloudClient<RequestType, ResultType> getClient();
    

    3.实际使用子类重写getClient方法1,返回实现类

    
    class RedisProxyClient implements CloudClient<DescribeAvailableResourceRequest, DescribeAvailableResourceResult> {
    
            @Override
            public CloudResponse<DescribeAvailableResourceResult> describe(DescribeAvailableResourceRequest request) {
                return client.describeAvailableResource(request);
            }
        }
    	
    @Override
    protected CloudClient<DescribeAvailableResourceRequest, DescribeAvailableResourceResult> getClient() {
            return new RedisProxyClient();
    }
    

    4.实际使用子类重写getClient方法2,返回lambda表达式代表实现类,但是前提是接口中只有一个方法才行

    @Override
        protected CloudClient<DescribeAvailableResourceRequest, DescribeAvailableResourceResult> getClient() {
            return request -> client.describeAvailableResource(request);
        }
    

    5.使用方式

    CloudResponse<ResultType> response = getClient().describe(convertRequest())
    

    6.使用场景说明

    不同的产品redis,pod去调用不同的接口来进行获取规格,可以抽象一个接口的describe方法
    不同的产品都实现describe方法,内部通过lambda来模拟实现类。

  • 相关阅读:
    group having条件找max无记录问题
    Apache Http Server
    Google产品
    AES加密报错Illegal key size
    内网调试微信开发
    试用VSCode
    React的Transaction浅析
    一个webpack,react,less,es6的DEMO
    20151128
    React生命周期浅析
  • 原文地址:https://www.cnblogs.com/PythonOrg/p/14765772.html
Copyright © 2020-2023  润新知