接口Target要实现的方法在类Adaptee已经实现,可通过继承Apdatee,并实现Target方法。
package com.design;
public class PrintBanner extends Banner implements Print {
public PrintBanner(String string) {
super(string);
}
@Override
public void printWeak() {
showWithParen();
}
@Override
public void printStrong() {
showWithAster();
}
public static void main(String[] args) {
Print print = new PrintBanner("Hello");
print.printWeak();
print.printStrong();
}
}
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 + "*");
}
}
interface Print {
public void printWeak();
public void printStrong();
}
如果Target是类而不是接口,只能用继承+委托方式实现
package com.design;
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();
}
public static void main(String[] args) {
Print print = new PrintBanner("Hello");
print.printWeak();
print.printStrong();
}
}
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 + "*");
}
}
abstract class Print {
public abstract void printWeak();
public abstract void printStrong();
}