实例:现在有的物品是: 二相插孔、电脑(只支持三相插头),其中,电脑的供电只能有三相插头的供电方法进行。问题是怎么给电脑供电。所以,我们借助了一个适配器(二相转三相)实现三相插头的供电方法,而这个适配器本质上是输入二相,转化为三相,所以,构建这个适配器需要一个二相插孔参数,适配器实现的三相供电方法,其实就是在方法里使用了二相插孔的供电方法,这样,笔记本就有电了。。
定义:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
模式中的角色:
- 目标接口(Target):客户所期待的接口(三相)。目标可以是具体的或抽象的类,也可以是接口。
- 需要适配的类(Adaptee):需要适配的类或适配者类。(二相)
- 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。(二相转三相)
类适配器模式(多继承)和对象适配器模式
public class ObjectAdapter implements Target
{
private Adaptee adaptee;
public ObjectAdapter(Adaptee adaptee)
{
this.adaptee = adaptee;
}
@Override
public void request()
{
this.adaptee.specificRequest();
}
}
测试代码:
Target adapter = new ObjectAdapter(new Adaptee());
adapter.request();
默认适配器:
当你想实现一个接口但又不想实现接口中所有的方法,只想去实现一部分方法时,就用到了默认适配器模式。
解决方案:
在接口和具体实现类中添加一个抽象类,而用抽象类是实现目标接口的所有方法。而具体的实现类只需要覆盖其需要完成的方法即可。
举例:1 接口类(有许多方法:吃,睡,工作以及锻炼,但是我懒只想吃喝睡)
public interface Live
{
void sleep();
void eat();
void work();
void train();
}
2 抽象类:
public class LiveDefault implements Live
{
@Override public void sleep(){}
@Override public void eat(){}
@Override public void work(){}
@Override public void train(){}
}
3 实现类
public class LiveImpl extends LiveDefault
{
@Override
public void eat()
{
System.out.println("哇塞,好好吃");
}
@Override
public void sleep()
{
System.out.println("好困,就是不想起床");
}
}