类适配器模式:如家用电是220V,手机充电加入需要5V你就要去转换它。
设计的逻辑:
1.Phone需要充电所以有个充电的方法charging()方法。
2.charging()中传入适配5v电压的接口 interface IVoltage5V--->charging(IVoltage5V iVoltage5V)
3.适配5v电压的接口 interface IVoltage5V中有个output5V()方法被VoltageAdapter类重写。把220V处成5V输出。
//被适配的类
class Voltage220V {
public int output220V () {
int src = 220;
System.out.println("电压="+ src + "伏");
return src;
}
}
//适配接口
interface IVoltage5V {
int output5V();
}
//适配器类
class VoltageAdapter extends Voltage220V implements IVoltage5V {
@Override
public int output5V() {
int srcV = output220V();
int result = srcV / 44;
return result;
}
}
class Phone {
public void charging(IVoltage5V iVoltage5V) {
if (iVoltage5V.output5V() == 5) {
System.out.println("电压5V,可以充电");
} else {
System.out.println("警告,电压不是5V,即将爆炸!!!!");
}
}
}
//适配器设计模式
public class classAdapter {
public static void main (String[] args) {
System.out.println("类适配器设计模式");
Phone phone = new Phone();
phone.charging(new VoltageAdapter());
}
}
对象适配器和类适配器的区别:对象适配器通过构造器,传入实例
//被适配的类
class Voltage220V1 {
public int output220V () {
int src = 220;
System.out.println("电压="+ src + "伏");
return src;
}
}
//适配接口
interface IVoltage5V1 {
int output5V();
}
//适配器类 对象适配器
class VoltageAdapter1 implements IVoltage5V1 {
private Voltage220V1 voltage220V;
//通过构造器,传入一个Voltage220V 实例
public VoltageAdapter1(Voltage220V1 voltage220V) {
this.voltage220V = voltage220V;
}
@Override
public int output5V() {
int result = 0;
if (voltage220V != null) {
int src =voltage220V.output220V();
result = src / 44;
}
return result;
}
}
class Oppo {
public void charging(IVoltage5V1 iVoltage5V) {
if (iVoltage5V.output5V() == 5) {
System.out.println("电压5V,可以充电");
} else {
System.out.println("警告,电压不是5V,即将爆炸!!!!");
}
}
}
//适配器设计模式
public class objectAdapter {
public static void main (String[] args) {
System.out.println("对象适配器设计模式");
Oppo oppo = new Oppo();
oppo.charging(new VoltageAdapter1(new Voltage220V1()));
}
}
接口适配器模式:适用于一个接口不想使用其所有的方法的情况。
就是一个接口有N个方法,你只用其中几个,就用抽象类去实现这个接口,重写其中你要用的。
nterface interface1 {
void a1();
void a2();
void a3();
}
abstract class abstract1 implements interface1 {
public void a1() {}
public void a2() {}
public void a3() {}
}
//适配器设计模式
public class interfaceAdapter {
public static void main (String[] args) {
System.out.println("接口适配器设计模式");
abstract1 abstract1 = new abstract1() {
public void a1() {
System.out.println("使用a1()方法");
}
};
abstract1.a1();
}
}