1.为什么要有适配器设计模式
解决接口与接口实现类之间的继承矛盾问题
eg:一个食谱上有非常多的菜,蒸羊羔、蒸熊掌、蒸鹿尾儿、烧花鸭、烧雏鸡、烧子鹅、卤猪、卤鸭、酱鸡......我现在想要吃蒸羊羔,对应到程序中,首先我将会写一个食谱的接口,每一道菜名都是一个方法,那么我想吃蒸羊羔我要实现这个接口,就会造成我要重写所有的方法,可我只是想吃蒸羊羔,没必要实现所有的方法,所以矛盾就来了。
那么适配器模式解决的就是这种问题
试想,我想吃蒸羊羔其实我只要选择一个商家就可以吃到了,商家去实现食谱接口即可,我只要继承它,实现蒸羊羔这个方法即可,所以商家其实是一个抽象类,它去实现食谱的接口即可;为什么要使用抽象类,因为必须要被继承,不能实例化对象,否则商家就自己玩了,赚不到钱了。
2.适配器设计模式特征
1)使用抽象类分离了接口与【接口实现】
2)抽象类分摊接口中需要常用的方法
3)使得【接口实现类】像逛超市一样,可以随意选择
接口中的方法来实现
3.代码实现
食谱接口类:
public interface 食谱 {
public void 蒸羊羔();
public void 蒸熊掌();
public void 蒸鹿尾儿();
public void 烧花鸭();
......
}
商家实现类:
public abstract class 商家 implements 食谱 {
@Override
public void 蒸羊羔(){
System.out.println("蒸羊羔");
}
@Override
public void 蒸熊掌(){
System.out.println("蒸熊掌");
}
@Override
public void 蒸鹿尾儿(){
System.out.println("蒸鹿尾儿");
}
@Override
public void 烧花鸭(){
System.out.println("烧花鸭");
}
......
}
我的实现类
public class 我 extends 商家 {
@Override
public void 蒸羊羔(){
System.out.println("蒸羊羔");
}
}
测试类:
public class TestMain {
public static void main(String[] args) {
食谱 sp = new 我();
sp.蒸羊羔();
}
}
4.参考Servlet规范中GenericServlet
servlet规范中GenericServlet是一个很好的适配器模式实现,可参考