继承于源类的同时实现目标接口
类名 | 备注 |
---|---|
表示目标角色 | |
Banner | 表示源角色 |
PrintBanner | 表示适配器角色 |
public interface Print {
abstract void printWeak();
abstract void printStrong();
}
public class Banner {
private String nameString;
public Banner(String nameString) {
this.nameString=nameString;
}
public void showWithParen() {
System.out.println("("+nameString+")");
}
public void showWithAster() {
System.out.println("*"+nameString+"*");
}
}
/**
* 适配器角色
*/
public class PrintBanner extends Banner implements Print {
public PrintBanner(String nameString) {
super(nameString);
}
/*
* 实现Print接口(目标)的两个方法
* 同时,继承Banner父类(源)的两个方法
*/
@Override
public void printWeak() {
showWithParen();
}
@Override
public void printStrong() {
showWithAster();
}
}
Tips:PrintBanner与Banner是继承关系,这决定了这个适配器模式是类的
/**
* 如果目标角色不是接口而是抽象类
*/
public abstract class PrintTwo {
public abstract void printWeak();
public abstract void printStrong();
}
# 源角色无变化,与继承适配器使用同一类
public class PrintBannerTwo extends PrintTwo {
private Banner banner;
// 初始化类的时候获取到委派对象
public PrintBannerTwo(String nameString) {
this.banner = new Banner(nameString);
}
@Override
public void printWeak() {
/**
* 通过委派形式实现适配器
*/
banner.showWithParen();
}
@Override
public void printStrong() {
banner.showWithAster();
}
}
优点 | 缺点 | |
---|---|---|
类适配器 | 使用方便,仅需要引入一个对象 | 高耦合、灵活性差。使用对象继承的方式,是静态的定义方式 |
对象适配器 | 低耦合、灵活性高。采用 “对象组合”的方式,是动态组合方式 | 使用复杂 |
原文:https://www.cnblogs.com/stupidhao/p/12205792.html