适配器模式
根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种,在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系,实际应用中对象适配器比较多。
适配器的适用:适配器应用的场景只要记住一点就足够了:你有动机修改一个已经投产中的接口时,适配器模式可能是最适合你的模式。比如系统扩展了,需要使用一个已有或新建立的类,但这个类又不符合系统的接口,怎么办?使用适配器模式。适配器模式主要用于系统开发好后的维护和升级。
例子:猫能狗叫,狗能抓老鼠。
猫的接口
package 适配器;
public interface ICat {
public void CatLooks();
public void ZhuoShu();
}
猫的具体实现接口
package 适配器;
import 适配器.ICat;
public class ICatImpl implements ICat {
@Override
public void CatLooks() {
System.out.println("我有猫的外表");
}
@Override
public void ZhuoShu() {
System.out.println("我抓老鼠");
}
}
狗的接口
package 适配器;
public interface IDog {
public void DogLook();
public void GouJiao();
}
狗的具体实现
package 适配器;
public class IDogImpl implements IDog {
@Override
public void DogLook() {
System.out.println("我有狗的外表");
}
@Override
public void GouJiao() {
System.out.println("汪汪汪");
}
}
适配器类
package 适配器;
public class Adapter implements IDog,ICat {
IDog iDog=null;
ICat iCat=null;
public Adapter(ICat iCat){
this.iCat=iCat;
}
public Adapter(IDog iDog){
this.iDog=iDog;
}
@Override
public void CatLooks() {
System.out.println("我是一只猫");
}
@Override
public void ZhuoShu() {
iDog.GouJiao();
}
@Override
public void DogLook() {
System.out.println("我是一只狗");
}
@Override
public void GouJiao() {
iCat.ZhuoShu();
}
}
客户端类
package 适配器;
public class Test {
public static void main(String[] args) {
ICat fakerCat=new Adapter(new IDogImpl());
fakerCat.CatLooks();
fakerCat.ZhuoShu();
IDog fakerDog=new Adapter(new ICatImpl());
fakerDog.DogLook();
fakerDog.GouJiao();
}
}