在现有程序以及需求冲突的情况下,在两者之间加个适配器,让两者在适配器的协调下可以正常工作的模式叫适配器模式。
使用继承的适配器
/**
* 表示现有的程序
*
* Created by Administrator on 2018/5/25 0025.
*/
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+"*");
}
}
/**
* 表示现在的需求
*
* Created by Administrator on 2018/5/25 0025.
*/
public interface Print {
public abstract void printWeak();
public abstract void printStrong();
}
/**
* 扮演适配器角色
*
* Created by Administrator on 2018/5/25 0025.
*/
public class PrintBanner extends Banner implements Print {
public PrintBanner(String string) {
super(string);
}
//对外暴露方法实现,实际是经由适配器调用真实的现有代码完成。
@Override
public void printWeak() {
showWithParen();
}
//对外暴露方法实现,实际是经由适配器调用真实的现有代码完成。
@Override
public void printStrong() {
showWithAster();
}
}
使用委托的适配器
/**
* 表示现在的实际情况
*
* Created by Administrator on 2018/5/25 0025.
*/
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+"*");
}
}
/**
* 表示现在的需求
*
* Created by Administrator on 2018/5/25 0025.
*/
public interface Print {
public abstract void printWeak();
public abstract void printStrong();
}
/**
* 扮演适配器角色
*
* Created by Administrator on 2018/5/25 0025.
*/
public class PrintBanner implements Print {
private Banner banner;
private String string;
public PrintBanner(String string) {
banner = new Banner(string);
}
//对外暴露方法实现,实际是经由适配器调用真实的现有代码完成。
@Override
public void printWeak() { banner.showWithParen(); }
//对外暴露方法实现,实际是经由适配器调用真实的现有代码完成。
@Override
public void printStrong() {
banner.showWithAster();
}
}
//类适配器模式
Print print = new PrintBanner("hello");
print.printStrong();
print.printWeak();