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

Posted fating

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式--结构模式--适配者模式相关的知识,希望对你有一定的参考价值。

一、基本概念

  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.能给华为手机充电...

 

三、总结。

     后续补充。

 

以上是关于设计模式--结构模式--适配者模式的主要内容,如果未能解决你的问题,请参考以下文章

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

设计模式结构型(代理模式桥接模式装饰者模式适配器模式)

结构型模式-适配器模式(不兼容结构的协调)

设计模式 结构型模式 -- 结构型模式(代理模式适配器模式装饰者模式桥接模式外观模式组合模式享元模式)

跟我学Java设计模式第三天:代理模式适配器装饰者等其中模式结构

设计模式结构型模式