适配器模式
将某个类的接口转换成客户端期望的另一个接口表示。使得原本由于接口不兼容而不能一起工作的那些类能在一起工作。
类适配器
/**
* @USER: lynn
* @DATE: 2020/4/26
**/
public class 类适配器 {
public static void main(String[] args) {
充电器 phone = new 手机();
System.out.println(phone.高压转低压());
}
}
class 高压电{
public int 插座(){
int output = 220;
return output;
}
}
interface 充电器{
int 高压转低压();
}
class 手机 extends 高压电 implements 充电器{
@Override
public int 高压转低压() {
int 高压电 = 插座();
//适配细节
int 低压电 = 高压电/44;
return 低压电;
}
}
或者
/**
* @USER: lynn
* @DATE: 2020/4/26
**/
public class 类适配器 {
public static void main(String[] args) {
充电器 phone = new 手机();
System.out.println(phone.高压转低压());
}
}
abstract class 高压电 implements 充电器{
public int 插座(){
int output = 220;
return output;
}
}
interface 充电器{
int 高压转低压();
}
class 手机 extends 高压电{
@Override
public int 高压转低压() {
int 高压电 = 插座();
//适配细节
int 低压电 = 高压电/44;
return 低压电;
}
}
对象适配器
对象适配器拥有源角色的实例
/**
* @USER: lynn
* @DATE: 2020/4/26
**/
public class 对象适配器 {
public static void main(String[] args) {
充电器 phone = new 手机对象(new 高压电());
System.out.println(phone.高压转低压());
}
}
class 手机对象 extends 高压电 implements 充电器{
private 高压电 伏220高压电;
public 手机对象(高压电 伏220高压电) {
this.伏220高压电 = 伏220高压电;
}
@Override
public int 高压转低压() {
int 高压电 = 伏220高压电.插座();
//适配细节
int 低压电 = 高压电/44;
return 低压电;
}
}
接口适配器
通过抽象类来实现适配
/**
* @USER: lynn
* @DATE: 2020/4/26
**/
public class 接口适配器 {
public static void main(String[] args) {
手机输入 phone = new 手机适配器(new 工业插座());
System.out.println("输出后电压"+phone.输入电压());
phone = new 手机适配器(new 家庭插座());
System.out.println("输出后电压"+phone.输入电压());
}
}
abstract class 插座{
public int 输出电压(){
return 200;
}
}
class 家庭插座 extends 插座{
@Override
public int 输出电压() {
return 220;
}
}
class 工业插座 extends 插座{
@Override
public int 输出电压() {
return 440;
}
}
interface 手机输入{
int 输入电压();
}
class 手机适配器 implements 手机输入{
private 插座 chazuo;
public 手机适配器(家庭插座 jiatingchazuo) {
this.chazuo = jiatingchazuo;
}
public 手机适配器(工业插座 gongyechazuo) {
this.chazuo = gongyechazuo;
}
@Override
public int 输入电压() {
if (chazuo !=null){
System.out.println("输出前电压:"+chazuo.输出电压());
}
//适配逻辑
return 5;
}
}
- 使用场景
- 项目接口的新需求,不用更改老代码,实现代码兼容