Adapter模式

程序中经常会存在现有程序无法直接使用,需要做适当变化后才能使用的情况。
这种填补“现有程序”和“所需程序”之间差异的设计模式就是Adapter模式。

Adapter模式也被称为Wrapper模式。
Wrapper有” 包装器 “的意思替我们将某样东西包装起来,使其能够用于其他用途的东西就被称为”包装器“或者”适配器

Adapter模式有以下两种

  • 类适配器(使用继承的适配器)
  • 对象适配器(使用委托的适配器)

示例代码(类适配器)

Banner

1
2
3
4
5
6
7
8
9
10
11
12
13
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 + "*");
}
}

Main

1
2
3
4
5
6
7
public class Main {
public static void main(String[] args) {
Print p = new PrintBanner("Hello");
p.printWeak();
p.printStrong();
}
}

Print

1
2
3
4
public interface Print {
public abstract void printWeak();
public abstract void printStrong();
}

PrintBanner

1
2
3
4
5
6
7
8
9
10
11
public class PrintBanner extends Banner implements Print {
public PrintBanner(String string) {
super(string);
}
public void printWeak() {
showWithParen();
}
public void printStrong() {
showWithAster();
}
}

示例代码(对象适配器)

Banner

1
2
3
4
5
6
7
8
9
10
11
12
13
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 + "*");
}
}

Main

1
2
3
4
5
6
7
public class Main {
public static void main(String[] args) {
Print p = new PrintBanner("Hello");
p.printWeak();
p.printStrong();
}
}

Print

1
2
3
4
public abstract class Print {
public abstract void printWeak();
public abstract void printStrong();
}

PrintBanner

1
2
3
4
5
6
7
8
9
10
11
12
public class PrintBanner extends Print {
private Banner banner;
public PrintBanner(String string) {
this.banner = new Banner(string);
}
public void printWeak() {
banner.showWithParen();
}
public void printStrong() {
banner.showWithAster();
}
}