设计模式 – Adapter模式(适配器模式)
用于填补”现有程序”和”所需程序”之间差异的设计设计模式
类适配器模式(使用委托的适配器)
package xin.gonefuture.adapter.adapterUseDelegation;
/**
* <pre>
* <h1>适配器模式</h1>
* - 类适配器模式(使用继承的适配器)
* - 对象适配器模式(使用委托的适配器)
*
* <p>本类角色:Adaptee(被适配)</p>
*
* 实例: 将输入的字符串显示为(Hello)或是*Hello*的简单程序
*
* </pre>
*/
public class Banner {
private String string;
Banner(String string) {
this.string = string;
}
public void showWithParen() {
System.out.println("(" + string + ")");
}
public void showWithAster() {
System.out.println("*" + string + "*");
}
}
----------
package xin.gonefuture.adapter.adapterUseDelegation;
/**
* <pre> Adapter (适配)</pre>
*/
public class PrintBanner extends Print {
private Banner banner;
PrintBanner(String string) {
this.banner = new Banner(string);
}
@Override
public void printWeek() {
banner.showWithParen();
}
@Override
public void printStrong() {
banner.showWithAster();
}
}
----------
public abstract class Print {
public abstract void printWeek();
public abstract void printStrong();
}
----------
public class Main {
public static void main(String[] args) {
Print p = new PrintBanner("Hello");
p.printWeek();
p.printStrong();
}
}
对象适配器模式(使用继承的适配器)
/**
* <pre>
* <h1>适配器模式</h1>
* - 类适配器模式(使用继承的适配器)
* - 对象适配器模式(使用委托的适配器)
*
* 实例: 将输入的字符串显示为(Hello)或是*Hello*的简单程序
*
* </pre>
*/
public class Banner {
private String string;
Banner(String string) {
this.string = string;
}
public void showWithParen() {
System.out.println("(" + string + ")");
}
public void showWithAster() {
System.out.println("*" + string + "*");
}
}
----------
public class PrintBanner extends Banner implements Print {
public PrintBanner(String string) {
super(string);
}
@Override
public void printWeek() {
showWithParen();
}
@Override
public void printStrong() {
showWithAster();
}
}
----------
public interface Print {
public abstract void printWeek();
public abstract void printStrong();
}
----------
public interface Print {
public abstract void printWeek();
public abstract void printStrong();
}