一、定义
适配器模式将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作。
适配器模式:适配器模式是一种事后的补救策略。适配器提供跟原始类不同的接口,而代理模式、装饰器模式提供的都是跟原始类相同的接口。二、实现方式
适配器模式中的角色有:
1、目标角色(target):这是客户锁期待的接口。目标可以是具体的或抽象的类,也可以是接口
2、原始角色(adaptee):已有接口/类,但是和客户器期待的接口不同。
3、适配器角色(adapter):将已有接口转换成目标接口。
适配器模式,主要有两种实现方式,分别是:类适配器和对象适配器
-
类适配器:通过继承适配者 + 实现目标接口 来实现适配器功能。
-
对象适配器:通过组合适配者(适配者对象引入) + 实现目标接口 来实现适配器功能
类适配器模式(class adapter pattern):
由于适配器adapter类是适配者adaptee类的子类,因此可以在适配器类中置换一些适配者的方法,即Override(重写),使得适配器的灵活性更强。
对象适配器模式(object adapter pattern):
一个对象适配器可以把多个不同的适配者adaptee适配到一个目标,也就是说,同一个适配器可以将适配者类和它的子类都适配到目标接口。
场景: 本身有220V输出电压,现在要新增5V输出电压。
1.1、原始角色
/** * 原始类 */ public class Adaptee { public int methodBy220() { System.out.println("电源输出电压:220V"); return 220; } }
1.2、目标角色
1 2 public interface ITarget { 3 public int method5(); 4 }
1.3、适配器角色 - 类适配器模式
1 public class Adapter extends Adaptee implements ITarget { 2 @Override 3 public int method5() { 4 int output = super.methodBy220(); 5 System.out.println("电源适配器开始工作,此时输出电压是:" + output); 6 output = output/44; 7 System.out.println("电源适配器工作完成,此时输出电压是:" + output); 8 return output; 9 } 10 }
1.4、适配器角色 - 对象适配器模式
1 public class Adapter implements PowerTarget{ 2 // 适配者角色 3 private Adaptee adaptee; 4 5 public Adapter(Adaptee adaptee) { 6 this.adaptee = adaptee; 7 } 8 9 @Override 10 public int method5() { 11 int output = adaptee.methodBy220(); 12 System.out.println("电源适配器开始工作,此时输出电压是:" + output); 13 output = output/44; 14 System.out.println("电源适配器工作完成,此时输出电压是:" + output); 15 return output; 16 } 17 18 }
结果:
public static void main(String[] args) { Adapter adapter = new Adapter(); adapter.method5(); } 或者 public static void main(String[] args) { Adapter adapter = new Adapter(new Adaptee); adapter.method5(); } 电源输出电压:220V 电源适配器开始工作,此时输出电压是:220 电源适配器工作完成,此时输出电压是:5
三、使用场景-待补充
标签:10,适配,适配器,接口,output,设计模式,public,adapter From: https://www.cnblogs.com/baopeer/p/16618180.html