设计模式--结构模式--适配者模式

一、基本概念

  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 }
View Code

    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 }
View Code

    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 }
View Code

    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 }
View Code

运行结果

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 }
View Code

    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 }
View Code

    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 }
View Code

    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 }
View Code

运行结果

1.能给苹果手机充电...
2.能给小米手机充电...
3.能给华为手机充电...

三、总结。

     后续补充。

猜你喜欢

转载自www.cnblogs.com/fating/p/12521156.html