类适配器模式介绍
基本介绍:Adapter 类,通过继承 src 类,实现 dst 类接口,完成 src->dst 的适配。
类适配器模式应用实例
package com.jinxu.adapter.classadapter;
//被适配的类
public class Voltage220V {
//输出220V的电压
public int output220V() {
int src = 220;
System.out.println("电压=" + src + "伏");
return src;
}
}
package com.jinxu.adapter.classadapter;
//适配接口
public interface IVoltage5V {
public int output5V();
}
package com.jinxu.adapter.classadapter;
//适配器类
public class VoltageAdapter extends Voltage220V implements IVoltage5V {
@Override
public int output5V() {
// TODO Auto-generated method stub
//获取到220V电压
int srcV = output220V();
int dstV = srcV / 44 ; //转成 5v
return dstV;
}
}
package com.jinxu.adapter.classadapter;
public class Phone {
//充电
public void charging(IVoltage5V iVoltage5V) {
if(iVoltage5V.output5V() == 5) {
System.out.println("电压为5V, 可以充电~~");
} else if (iVoltage5V.output5V() > 5) {
System.out.println("电压大于5V, 不能充电~~");
}
}
}
package com.jinxu.adapter.classadapter;
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(" === 类适配器模式 ====");
Phone phone = new Phone();
phone.charging(new VoltageAdapter());
}
}
类适配器模式注意事项和细节
对象适配器模式介绍
package com.jinxu.adapter.objectadapter;
//被适配的类
public class Voltage220V {
//输出220V的电压,不变
public int output220V() {
int src = 220;
System.out.println("电压=" + src + "伏");
return src;
}
}
package com.jinxu.adapter.objectadapter;
//适配接口
public interface IVoltage5V {
public int output5V();
}
package com.jinxu.adapter.objectadapter;
//适配器类
public class VoltageAdapter implements IVoltage5V {
private Voltage220V voltage220V; // 关联关系-聚合
//通过构造器,传入一个 Voltage220V 实例
public VoltageAdapter(Voltage220V voltage220v) {
this.voltage220V = voltage220v;
}
@Override
public int output5V() {
int dst = 0;
if(null != voltage220V) {
int src = voltage220V.output220V();//获取220V 电压
System.out.println("使用对象适配器,进行适配~~");
dst = src / 44;
System.out.println("适配完成,输出的电压为=" + dst);
}
return dst;
}
}
package com.jinxu.adapter.objectadapter;
public class Phone {
//充电
public void charging(IVoltage5V iVoltage5V) {
if(iVoltage5V.output5V() == 5) {
System.out.println("电压为5V, 可以充电~~");
} else if (iVoltage5V.output5V() > 5) {
System.out.println("电压大于5V, 不能充电~~");
}
}
}
package com.jinxu.adapter.objectadapter;
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(" === 对象适配器模式 ====");
Phone phone = new Phone();
phone.charging(new VoltageAdapter(new Voltage220V()));
}
}
接口适配器模式介绍
有时候我们不想实现 Animator.AnimatorListener 接口的全部方法,我们只想监听
onAnimationStart,我们会如下写:
AnimatorListenerAdapter 类,就是一个接口适配器,代码如图:它空实现了Animator.AnimatorListener 类(src)的所有方法
package com.jinxu.adapter.interfaceadapter;
public interface Interface4 {
public void m1();
public void m2();
public void m3();
public void m4();
}
package com.jinxu.adapter.interfaceadapter;
//在AbsAdapter 我们将 Interface4 的方法进行默认实现
public abstract class AbsAdapter implements Interface4 {
//默认实现
public void m1() {
}
public void m2() {
}
public void m3() {
}
public void m4() {
}
}
package com.jinxu.adapter.interfaceadapter;
public class Client {
public static void main(String[] args) {
AbsAdapter absAdapter = new AbsAdapter() {
//只需要去覆盖我们 需要使用 接口方法
@Override
public void m1() {
// TODO Auto-generated method stub
System.out.println("使用了m1的方法");
}
};
absAdapter.m1();
}
}
我们熟悉的springMVC中哪里使用了适配器模式呢?
java设计模式往期回顾:
设计模式原则demo示例下载
1.java设计模式
2.java设计模式原则——单一职责原则
3.java设计模式原则——接口隔离原则
4.java设计模式原则——依赖倒置原则
5.java设计模式原则——里氏替换原则
6.java设计模式原则——开闭原则
7.java设计模式原则——迪米特法则
8.java设计模式原则——合成复用原则
9.java设计模式概述和分类
10.java设计模式——单例模式
11.java设计模式——工厂模式
12.java设计模式——原型模式
13.java设计模式——建造者模式