Adapter模式(适配器模式)
适配器模式
1.类适配器模式(继承)
基础类,提供printWithParen()方法来打印带()的内容,提供printWithAster()方法来提供带*号的内容:
Banner.java
public class Banner {
private String show;
public Banner(String show) {
this.show = show;
}
// 打印加括号
public void printWithParen() {
System.out.println("(" + show + ")");
}
// 打印加*号
public void printWithAster() {
System.out.println("*" + show + "*");
}
}
现在的需求是要提供printWeak和printStrong方法分别打印括号和星号。
Print.java
/**
* 需求接口,要一个printWeak和printStrong分别打印括号和星号
*/
public interface Print {
// 打印()
void printWeak();
// 打印*
void printStrong();
}
适配器类,printWeak,printStrong方法使用printWithParen,printWithAster方法来实现。
所以通过继承来获取Banner 中printWithParen,printWithAster方法,并 实现Print 接口,实现printWeak,printStrong方法。
PrintBanner.java
// 适配器类,继承Banner类获得printWithParen、printWithAster方法,实现Print接口,实现需求 提供适配
public class PrintBanner extends Banner implements Print{
public PrintBanner(String show) {
// 父类构造器 即Banner类的构造器
super(show);
}
@Override
public void printWeak() {
// 继承的方法
printWithParen();
}
@Override
public void printStrong() {
// 继承的方法
printWithAster();
}
}
测试类:
@Test
public void test() {
Print p = new PrintBanner("demo");
p.printWeak();
p.printStrong();
}
控制台打印:
(demo)
*demo*
Print p = new PrintBanner(“demo”),面向Print接口编程,printWeak,printStrong方法的实现,对于调用者完全隐藏。
委托适配器模式(对象)
上面的示例是通过调用 继承的来的printWithParen,printWithAster方法来实现的。也可以 通过具体对像来调用。
Banner.java
public class Banner {
private String show;
public Banner(String show) {
this.show = show;
}
public void printWithParen() {
System.out.println("(" + show + ")");
}
public void printWithAster() {
System.out.println("*" + show + "*");
}
}
Print.java
public interface Print {
void printStrong();
void printWeak();
}
PrintBanner.java
// 实现接口方式,不需要继承
public class PrintBanner implements Print {
// 对象实例
private Banner banner;
public PrintBanner(String show) {
this.banner = new Banner(show);
}
@Override
public void printStrong() {
banner.printWithParen();
}
@Override
public void printWeak() {
banner.printWithAster();
}
}
测试:
@Test
public void test() {
Print print = new PrintBanner("hello");
print.printStrong();
print.printWeak();
}
控制台打印 :
(hello)
*hello*
记录
Adapter模式会对现有的类进行适配,生成新的类。通过该模式可以很方便的创建我们需要的方法群 。不改变原有类,生成新的类。Adapter模式填补具有不同接口的两个类之间的缝隙。角色功能完全不同则不能使用Adapter模式。