java 设计模式学习笔记(13) - 适配器模式

来源:互联网 发布:网络热门作家 像汤唯 编辑:程序博客网 时间:2024/05/16 06:01

 适配器模式:将一个类得接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

在软件开发中,系统的数据和行为都正确,但接口不符合时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望服用一些现存的类,但是接口又与复用环境要求不一致的情况。

 

简单来说就是:有一段有用的代码我想使用,但这段代码提供的接口A我不喜欢或者我用不了,我只能用通过调用接口B来满足我的需求,也许这段代码我没有修改权限,也许修改它的成本太高,导致我又不能改变这段代码的接口来符合我的需要。 那么这个时候,我可以使用一个适配器,这个适配器调用了A接口,同时又提供了B接口来供我使用。

 

 

 

1.Target 类:客户所期待的接口,可以使具体或抽象的类,也可以是接口。根据面向接口编程的思想,将其写成接口类。

                    这个接口类非常简单,仅有一个getPower() 的抽象方法,表示获取电能

 

 

 

 

2. IPhone 类:需要适配的类(Adaptee),拥有一个具体请求的方法getLowerPower()。在这里,IPhone 就是原本存在的接口,客户代码需要用到这个具体请求的方法getLowerPower(),但是又不方便直接使用这个接口。

 

 

 

3. Adapter 类:适配器类,这个适配器类实现了Target 接口,保存了 IPhone 类的一个引用,并在实现getPower方法里调用getLowerPower()方法。客户代码通过调用Adapter 类的getPower()方法,即通过调用期待接口来调用 需要的接口。 

 

 

 

4. 编写测试用的代码来验证下结果:

 

 

 

 

 

结果输出 :i get lower power!

 

 

讨论:

适配器模式和代理模式的异同点:

相同点在于 :

                 客户代码都会使用额外的一个类(proxy , adapter) 提供的接口来调用最终需要的接口

 

不同点在于:

          1.   代理模式的出发点是隐藏了原来的类,代理类为客户代码提供了一个与原来类相同的接口。

                 适配器模式的出发点就是为客户代码提供一个和原来类不一样并且客户代码指定需要的接口。

          2.  代理模式中的代理类和被代理类都继承了同一个抽象类或都实现了同一个接口

               适配器模式中只有adapter 继承了 target 类,或实现了target  接口。

 

通过比较分别加深了代理模式和适配器模式的理解,以后要多进行比较和复习

 

 

 

 

 

 

原创粉丝点击