赞
踩
现实生活中的适配器例子
泰国插座用的是两孔的(欧标),可以买个多功能转换插头(适配器),这样就可以使用了。
基本介绍: Adapter类, 通过继承src类,实现dst类接口,完成src->dst的适配。
以生活中充电器的例子来讲解适配器,充电器本身相当于Adapter, 220V交流电相当于src (即被适配者),我们的目dst(即目标)是5V直流电
IVoltage5V.class:
- public interface IVoltage5V {
- public int output5V();
- }
Voltage220V.class:
- // 被适配的类
- public class Voltage220V {
-
- // 输出220V的电压
- public int output220V(){
- int src = 220;
- System.out.println("电压 = " + src + "伏");
- return src;
- }
-
- }
VoltageAdapter.class:
- // 适配器类
- public class VoltageAdapter extends Voltage220V implements IVoltage5V{
- @Override
- public int output5V() {
- // 获取到220V电压
- int srcV = output220V();
- int dstV = srcV / 44;
-
- return dstV;
- }
- }
Phone.class:
- // 适配器类
- public class VoltageAdapter extends Voltage220V implements IVoltage5V{
- @Override
- public int output5V() {
- // 获取到220V电压
- int srcV = output220V();
- int dstV = srcV / 44;
-
- return dstV;
- }
- }
VoltageAdapter.class:
- // 适配器类
- public class VoltageAdapter implements IVoltage5V {
-
- public VoltageAdapter(Voltage220V voltage220V) {
- this.voltage220V = voltage220V;
- }
-
- public VoltageAdapter() {
-
- }
-
- private Voltage220V voltage220V = new Voltage220V();
-
- @Override
- public int output5V() {
- int dst = 0;
- if (voltage220V == null){
- System.out.println("适配失败");
- return dst;
- }
- // 获取220V电压
- int src = voltage220V.output220V();
- System.out.println("使用对象适配器,进行适配");
- dst = src / 44;
- System.out.println("适配完成,输出电压为 : " + dst);
-
- return dst;
- }
- }

应用实例(类图)
代码实现
Interface4.class:
- public interface Interface4 {
-
- void m1();
- void m2();
- void m3();
- void m4();
-
- }
AbsAdapter.class:
- public abstract class AbsAdapter implements Interface4{
-
-
- @Override
- public void m1() {
-
- }
-
- @Override
- public void m2() {
-
- }
-
- @Override
- public void m3() {
-
- }
-
- @Override
- public void m4() {
-
- }
- }

Client.class:
- public class Client {
-
- public static void main(String[] args) {
- AbsAdapter adapter = new AbsAdapter() {
- @Override
- public void m1() {
- System.out.println("使用了m1方法");
- }
- };
- adapter.m1();
- }
-
- }
可以看到处理器的类型不同,有多重实现方式,那么调用方式就不是确定的,如果需要直接调用Controller方法,需要调用的时候就得不断是使用if else来进行判断是哪一种子类然后执行。那么如果后面要扩展Controller,就得修改原来的代码,这样违背了OCP原则。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。