將一個類的接口轉(zhuǎn)換成用戶希望得到的另一種接口。它使原本不相容的接口得以協(xié)同工作。
1费奸、類適配器
package com.strife.pattern.adapter;
/**
* 類適配器模式
*
* @author mengzhenghao
* @date 2022/5/29
*/
public class ClassAdapter {
public static void main(String[] args) {
IVoltage5V voltage5V = new VoltageAdapter();
Phone phone = new Phone();
phone.charge(voltage5V);
}
}
/**
* 220V電壓(被適配的類)
*/
class Voltage220V {
public int output220V() {
int src = 220;
System.out.println("電壓" + src + "伏");
return src;
}
}
/**
* 5V電壓(適配接口)
*/
interface IVoltage5V {
int output5V();
}
/**
* 適配器類
*/
class VoltageAdapter extends Voltage220V implements IVoltage5V {
@Override
public int output5V() {
int src = output220V();
System.out.println("將220V電壓轉(zhuǎn)換為5V");
//轉(zhuǎn)成5V
return src / 44;
}
}
/**
* 使用者
*/
class Phone {
public void charge(IVoltage5V voltage5V) {
if (voltage5V.output5V() == 5) {
System.out.println("電壓是5V辛掠,可以充電");
} else if (voltage5V.output5V() > 5) {
System.out.println("電壓是大于5V谢谦,不可以充電");
}
}
}
2、對象適配器
package com.strife.pattern.adapter;
/**
* 對象適配器
*
* @author mengzhenghao
* @date 2022/5/29
*/
public class ObjectAdapter {
public static void main(String[] args) {
Voltage220V1 voltage220V1 = new Voltage220V1();
IVoltage5V voltage5V = new VoltageAdapter1(voltage220V1);
Phone1 phone = new Phone1();
phone.charge(voltage5V);
}
}
/**
* 220V電壓(被適配的類)
*/
class Voltage220V1 {
public int output220V() {
int src = 220;
System.out.println("電壓" + src + "伏");
return src;
}
}
/**
* 5V電壓(適配接口)
*/
interface IVoltage5V1 {
int output5V();
}
/**
* 適配器類
*/
class VoltageAdapter1 implements IVoltage5V {
/** 聚合被適配類 */
private final Voltage220V1 voltage220V1;
public VoltageAdapter1(Voltage220V1 voltage220V1) {
this.voltage220V1 = voltage220V1;
}
@Override
public int output5V() {
int src = voltage220V1.output220V();
System.out.println("將220V電壓轉(zhuǎn)換為5V");
//轉(zhuǎn)成5V
return src / 44;
}
}
/**
* 使用者
*/
class Phone1 {
public void charge(IVoltage5V voltage5V) {
if (voltage5V.output5V() == 5) {
System.out.println("電壓是5V萝衩,可以充電");
} else if (voltage5V.output5V() > 5) {
System.out.println("電壓是大于5V回挽,不可以充電");
}
}
}
3、接口適配器模式(缺省適配器模式)
使用情形:當(dāng)不需要全部實(shí)現(xiàn)接口提供的方法時猩谊,可以先設(shè)計一個抽象類實(shí)現(xiàn)接口千劈,并未該接口中每個方法提供一個默認(rèn)實(shí)現(xiàn)(空方法),那么該抽象類的子類可以有選擇的覆蓋父類的某些方法來實(shí)現(xiàn)需求牌捷。
package com.strife.pattern.adapter;
/**
* 接口適配器
*
* @author mengzhenghao
* @date 2022/5/29
*/
public class InterfaceAdapter {
public static void main(String[] args) {
final AbstractAdapter adapter = new AbstractAdapter() {
@Override
public void method1() {
System.out.println("使用了method1方法");
}
};
adapter.method1();
}
}
interface InterfaceA {
void method1();
void method2();
void method3();
void method4();
}
abstract class AbstractAdapter implements InterfaceA {
@Override
public void method1() {}
@Override
public void method2() {}
@Override
public void method3() {}
@Override
public void method4() {}
}