SSM之适配器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37606901/article/details/82530512

简单的介绍一下适配器:
这里写图片描述
在进行适配器之前我们先来一个不采用适配器简单的例子:
接口:
厨师的接口:

package com.bjpowernode.worker;

public interface ICooker {
    String cook();
}

程序员的接口:

package com.bjpowernode.worker;

public interface IProgrammer {
    String program();
}

厨师的实现类:

package com.bjpowernode.worker.impl;

import com.bjpowernode.worker.ICooker;

public class QjdCooker implements ICooker {

    @Override
    public String cook() {
        return "烤制美味烤鸭";
    }

}

工程师的实现类:

package com.bjpowernode.worker.impl;

import com.bjpowernode.worker.IProgrammer;

public class JdProgrammer implements IProgrammer {

    @Override
    public String program() {
        return "编写高效程序";
    }

}

测试类:由程序可知程序里面就有了两种工种,所以就要new 两次对象,但是如果我是100个工种呢,难道也要进行new 100次嘛?

package com.bjpowernode.test;

import com.bjpowernode.worker.ICooker;
import com.bjpowernode.worker.IProgrammer;
import com.bjpowernode.worker.impl.JdProgrammer;
import com.bjpowernode.worker.impl.QjdCooker;

public class MyTest {

    public static void main(String[] args) {
        ICooker qjdCooker = new QjdCooker();
        IProgrammer jdProgrammer = new JdProgrammer();
        System.out.println(qjdCooker.cook());
        System.out.println(jdProgrammer.program());
    }

}

这里写图片描述
以上的这个代码因为没有使用适配器,所以就很麻烦。
(1)适配器:让一个接口转换成另一个接口,比如说家用电器是220V,但是呢我的手机充电器、电脑等等他们的使用电压都不是220V.所以我就会他们提供一个统一管理方式
(2)以上代码因为创建了两个对象,所以就是很麻烦的,所以我想要进行统一的管理,所谓的统一管理就是提供遍历。

所以我们由上面就可以知道了使用适配器的好处。

所以现在我就要定义一个适配器的接口:

package com.myproject.adapters;

public interface IWorkerAdapter {
    String work(Object worker);// 因为我不管你是哪一个,总之你就是worker,而且是object 类型
}

再者,适配器的实现类:

package com.myproject.worker.impl;

import com.myproject.adapters.IWorkerAdapter;
import com.myproject.worker.ICooker;
import com.myproject.worker.IProgrammer;

public class WorkerAdapter implements IWorkerAdapter {
    /*定义适配器
     * 
     * ***/
    public String work(Object worker) {
        // 因为下面的两个if中需要用到返回值对象。
        String workContent = " ";
        // 先对worker传过来的雷子那个进行判断,虽然什么对象都可以传过来,但是因为不同的对象调用不同的方法
        // 如果传过来的对象是厨师,那么我就调用cook()方法
        if (worker instanceof ICooker) {
            workContent =((ICooker) worker).cook();//如果不赋值给workContent的话,那么它将无法进行输出。
        }//为了提高效率,我用if---else进行连接
        else if (worker instanceof IProgrammer) {
            workContent=((IProgrammer) worker).programmer();
        }
        return workContent;// 返回上面定义的返回值对象
    }

}

其余的代码(厨师、程序员的接口以及接口的具体实现类都是和上面的一样),测试类如下:

package com.myproject.test;
import com.myproject.adapters.IWorkerAdapter;
import com.myproject.worker.ICooker;
import com.myproject.worker.IProgrammer;
import com.myproject.worker.impl.JdProgrammer;
import com.myproject.worker.impl.QjdCooker;
import com.myproject.worker.impl.WorkerAdapter;

public class MyTest {

    public static void main(String[] args) {
        ICooker qjdCooker=new QjdCooker();
        IProgrammer jdProgrammer=new JdProgrammer();
        //小技巧:选中qjdCooker.cook();alt+? 
        //因为要统一管理就需要用到适配器、也就是在这里需要的是进行遍历,既然是遍历那么就一定要有数组,所以我在这里就定义object 数组。
        //静态数组,直接赋值,把两个对象传过来。
        Object[] workers={qjdCooker,jdProgrammer};

        //在遍历之前,因为我要把遍历获得的对象放入适配器里面,但是前提我得首先创建一个适配器。
        IWorkerAdapter adapter =new WorkerAdapter();

        //循环遍历每个工种对象、让每个工种对象在适配器中逐个进行匹配
        for(Object worker:workers){
            String workContent=adapter.work(worker);
            System.out.println(workContent);
        }       
    }

}

我们再来进行修改,一个适配器还可以扩展很多分支,所以在这里我演示为每一个工种都创建单独的一个适配器。修改IWorkerAdapter:
这里写图片描述
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_37606901/article/details/82530512