一、基本概念
1、适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作。
2、角色:
A:Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配。
B:Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。
C:Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,使二者产生联系。
D:Client(客户端类) 测试使用。
3、适配器分为对象适配,类适配。具体看代码
二、例子
1、类适配器模式
A:Adaptee(适配者类):
1 package comm.pattern.struct.adapter; 2 3 /** 4 * 5 * @Title: IAppleAdaptee.java 6 * @Package: comm.pattern.struct.adapter 7 * @Description: 苹果充电器 8 * @author yangzhancheng 9 * @2020年3月18日:下午8:42:11 10 * 11 */ 12 public class AppleAdaptee { 13 14 //充电线接口 15 public void apple(){ 16 System.out.println("1.能给苹果手机充电..."); 17 } 18 }
B:Target(目标抽象类):
1 package comm.pattern.struct.adapter; 2 3 /** 4 * 5 * @Title: IAndroidPhoneTarget.java 6 * @Package: comm.pattern.struct.adapter 7 * @Description: Target(目标抽象类)给所有手机充电 8 * @author yangzhancheng 9 * @2020年3月18日:下午8:29:12 10 * 11 */ 12 13 public interface IPhoneTarget { 14 15 //给苹果充电 16 public void apple(); 17 18 //给小米手机充电 19 public void mi(); 20 21 //给华为手机充电 22 public void huwei(); 23 24 }
C:Adapter(适配器类):
1 package comm.pattern.struct.adapter; 2 3 /** 4 * 5 * @Title: ApppleAdapter.java 6 * @Package: comm.pattern.struct.adapter 7 * @Description: 适配者 8 * @author yangzhancheng 9 * @2020年3月18日:下午8:49:39 10 * 11 */ 12 public class PhoneAdapter extends AppleAdaptee implements IPhoneTarget{ 13 14 //给苹果充电 15 public void apple(){ 16 super.apple(); 17 } 18 19 //给小米手机充电 20 public void mi(){ 21 System.out.println("2.能给小米手机充电..."); 22 } 23 24 //给华为手机充电 25 public void huwei(){ 26 System.out.println("3.能给华为手机充电..."); 27 } 28 29 }
D:Client(客户端类) 测试使用。
1 package comm.pattern.struct.adapter; 2 /** 3 * 4 * @Title: Client.java 5 * @Package: comm.pattern.struct.adapter 6 * @Description: 客户端 7 * @author yangzhancheng 8 * @2020年3月18日:下午8:49:23 9 * 10 */ 11 public class Client { 12 13 public static void main(String[] args) { 14 15 IPhoneTarget apppleAdapter = new PhoneAdapter(); 16 apppleAdapter.apple(); 17 apppleAdapter.mi(); 18 apppleAdapter.huwei(); 19 20 } 21 22 }
运行结果
1.能给苹果手机充电... 2.能给小米手机充电... 3.能给华为手机充电...
2、对象适配器模式
A:Adaptee(适配者类):
1 package comm.pattern.struct.adapter; 2 3 /** 4 * 5 * @Title: IAppleAdaptee.java 6 * @Package: comm.pattern.struct.adapter 7 * @Description: 苹果充电器 8 * @author yangzhancheng 9 * @2020年3月18日:下午8:42:11 10 * 11 */ 12 public class AppleAdaptee { 13 14 //充电线接口 15 public void apple(){ 16 System.out.println("1.能给苹果手机充电..."); 17 } 18 }
B:Target(目标抽象类):
1 package comm.pattern.struct.adapter; 2 3 /** 4 * 5 * @Title: IAndroidPhoneTarget.java 6 * @Package: comm.pattern.struct.adapter 7 * @Description: Target(目标抽象类)给所有手机充电 8 * @author yangzhancheng 9 * @2020年3月18日:下午8:29:12 10 * 11 */ 12 13 public interface IPhoneTarget { 14 15 //给苹果充电 16 public void apple(); 17 18 //给小米手机充电 19 public void mi(); 20 21 //给华为手机充电 22 public void huwei(); 23 24 }
C:Adapter(适配器类):
1 package comm.pattern.struct.adapter; 2 3 /** 4 * 5 * @Title: ApppleAdapter.java 6 * @Package: comm.pattern.struct.adapter 7 * @Description: 适配者 8 * @author yangzhancheng 9 * @2020年3月18日:下午8:49:39 10 * 11 */ 12 public class PhoneAdapterExt implements IPhoneTarget{ 13 14 private AppleAdaptee appleAdaptee; 15 16 public PhoneAdapterExt(AppleAdaptee appleAdaptee){ 17 this.appleAdaptee = appleAdaptee; 18 } 19 20 //给苹果充电 21 public void apple(){ 22 appleAdaptee.apple(); 23 } 24 25 //给小米手机充电 26 public void mi(){ 27 System.out.println("2.能给小米手机充电..."); 28 } 29 30 //给华为手机充电 31 public void huwei(){ 32 System.out.println("3.能给华为手机充电..."); 33 } 34 35 }
D:Client(客户端类) 测试使用:
1 package comm.pattern.struct.adapter; 2 /** 3 * 4 * @Title: Client.java 5 * @Package: comm.pattern.struct.adapter 6 * @Description: 客户端 7 * @author yangzhancheng 8 * @2020年3月18日:下午8:49:23 9 * 10 */ 11 public class Client { 12 13 public static void main(String[] args) { 14 15 IPhoneTarget apppleAdapterExt = new PhoneAdapterExt(new AppleAdaptee()); 16 apppleAdapterExt.apple(); 17 apppleAdapterExt.mi(); 18 apppleAdapterExt.huwei(); 19 20 } 21 22 }
运行结果
1.能给苹果手机充电... 2.能给小米手机充电... 3.能给华为手机充电...
三、总结。
后续补充。
原文地址:https://www.cnblogs.com/fating/p/12521156.html
时间: 2024-10-08 18:42:36