对象适配器模式
目标接口:
package com.liyb.pattern.stud;
/**
* 目标接口
*/
public interface Target {
public void service();
}
待适配对象:
package com.liyb.pattern.stud;
/**
*待适配者
*/
public class Adapee {
public void specialServcie(){
System.out.println("我可是5.5mm标准耳机");
}
}
适配器:
package com.liyb.pattern.stud;
/**
* 真正的适配器
* 在使用场景中长充当的耳机接口转换器
*/
public class Adapter implements Target{
private Adapee adapteet;
@Override
public void service() {
adapteet.specialServcie();
System.out.println("ok,5.5mm耳机可以在3.5mm接口上使用了,谢谢你适配器");
}
}
类适配器模式
目标接口:
<span style="color:#000000;">public interface Target {
public void Request();
}</span>
需要适配的类:
public class Adaptee {
public void SpecificRequest(){
System.out.println("这是原始标准接口!");
}
}
适配器类:
<pre name="code" class="java">public class Adapter extends Adaptee implements Target {
public void Request() {
super.SpecificRequest();
}
}
为什么用适配器(WHY)
一天我的iphone手机没有电了,项目组多半是安卓充电器,这是同事Jon给我一个转化器,轻轻松松完成用安卓充电器给iphone充电,这就是一个简单的适配器。这个实例中,目标是给iphone手机充电,可惜只有安卓充电器,怎么办,聪明的人就想到了,制作一个适配器,一头配置iphone充电接口,一头配置android充电接口,于是乎一款既可以给iphone充电又可以给android充电的转换器在市场上流行了。
什么是适配器(WHAT)
模式中的角色:
目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
需要适配的类(Adaptee):需要适配的类或适配者类。
适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。
把一个类的接口(iphone充电口)变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作(android充电线和iphone手机拥抱在一起)。适配器模式又称为转换器模式、变压器模式、包装(Wrapper)模式。
定义:原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
什么时候用适配器(WHERE)
1、系统需要使用现有的类,而这些类的接口不符合系统的接口。
2、想要建立一个可以重用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
3、两个类所做的事情相同或相似,但是具有不同接口的时候。
4、 旧系统开发的类已经实现了一些功能,但客户端却只能以另外接口的形式访问,但我们不希望手动更改原有类的时候。
5、使用第三方组件,组件接口定义和自己定义的不同,不希望修改自己的接口,但是要使用第三方组件接口的功能。
怎么用适配器(WHO)
比较最上面类的适配器和对象适配器,我还是喜欢类适配器,好像是因为他符合我的理解模型。但是这中模型目标类必须是接口。