版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38737992/article/details/89405311
1. 概述
适配器(Adapter)设计模式用于解决现有的程序无法直接使用,需要做适当的变换才能使用的情况,这种用于填补“现有程序”和“所需程序”之间的差异就是适配器。
例:你的电脑充电器就是一个适配器,你的电脑需要几十伏直流的电,而我们家庭常用是220V的交流电,这就需要你的电脑充电器充当适配器,电脑充电器用于填补“220V的交流电”和“电脑所需几十伏直流的电”之间的差异。
适配器设计模式两种:类适配器模式(使用继承)、对象适配器模式(使用委托)。
2. 类适配器
所需类去继承实际类,所需类就是“所需程序”,实际类就是“现有程序”。
实际类,real.java:
package adapter;
public class Real {
private String string;
public Real(String string) {
this.string = string;
}
public void show1() {
System.out.println("***" + string + "***");
}
public void show2() {
System.out.println("###" + string + "###");
}
}
所需类的接口,Need.java:
package adapter;
public interface Need {
public void showNeed1();
public void showNeed2();
}
所需类(适配器),继承real.java,实现Need.java:
package adapter;
public class Real {
private String string;
public Real(String string) {
this.string = string;
}
public void show1() {
System.out.println("***" + string + "***");
}
public void show2() {
System.out.println("###" + string + "###");
}
}
测试类,test.java :
package adapter;
public class test {
public static void main(String args[]) {
Need need = new NeedImpl("Adapter");
need.showNeed1();
need.showNeed2();
}
}
运行截图:
2. 对象适配器模式
对象适配器模式使用的是委托,委托:让别人帮自己做事,自己不去实现。所需类的委托,通过把实际类当成自己的一个成员变量,通过调用这个成员变量来调用具体方法。
修改Need类为一个抽象类:
package adapter;
public abstract class Need {
public abstract void showNeed1();
public abstract void showNeed2();
}
修改NeedImpl(所需类),NeedImpl继承Need类,并将Real类(实际类)添加成为自己的成员变量。
package adapter;
public class NeedImpl extends Need {
private Real real;
public NeedImpl(String string) {
this.real = new Real(string);
}
public void showNeed1() {
this.real.show1();
}
public void showNeed2() {
this.real.show2();
}
}
运行测试类:
参考文献:
- 图解设计模式 - 结成浩著、杨文轩译 - 人民邮电出版社