Adapter模式
1. 定义:适配器模式(顾名思义:主要是用于填补"现有的程序与所需的程序之间的差异")
2. Adapter模式有两种:
- 类适配器模式(使用继承的适配器)
- 对象适配器模式(使用委托的适配器)
3. 我们来看下关系图(使用继承的适配器)
4. 实例代码
Banner.java
package Adapter.extend;
public class Banner {
private String string;
public Banner(String string) {
this.string = string;
}
public void showWithParen() {
System.out.println("(" + string + ")");
}
public void showWithAster() {
System.out.println("*" + string + "*");
}
}
Print.java
package Adapter.extend;
public interface Print {
public abstract void printWeak();
public abstract void printStrong();
}
PrintBanner.java
package Adapter.extend;
/*
*
* 相当于电源适配器,将220V 电压转换成电脑需要用的50 V电压
*/
public class PrintBanner extends Banner implements Print
{
public PrintBanner(String string) {
// 用于调用其父类的构造函数
super(string);
}
@Override
public void printWeak() {
showWithParen();
}
@Override
public void printStrong() {
showWithAster();
}
}
Main.java
package Adapter.extend;
public class Main {
public static void main(String[] args) {
Print p = new PrintBanner("Hello");
p.printWeak();
p.printStrong();
}
}
输出结果:
总结;
已有220V电压: PrintBanner
需要50V电压: Print
电源转换器: PrintBanner
优点:
我们只需要使用Print接口进行编程,也就是电脑只是使用50V电压进行工作,
它并不需要关系电压时如何进行转换的..优点就是我们在可以不用对Main类进行修改
的情况下改变PrintBanner类的具体实现.
5. 我们来看下关系图(使用委托的适配器)
Print.java
package Adapter.entrust;
public abstract class Print {
public abstract void printWeak();
public abstract void printStrong();
}
PrintBanner.java
package Adapter.entrust;
/*
*
* 相当于电源适配器,将220V 电压转换成电脑需要用的50 V电压
*/
public class PrintBanner extends Print {
private Banner banner;
public PrintBanner(String string) {
this.banner = new Banner(string);
}
@Override
public void printWeak() {
banner.showWithParen();
}
@Override
public void printStrong() {
banner.showWithAster();
}
}
两种模式对比: