一、Adapter(适配器模式)模式介绍
1、适配器模式的目的:填补"现有的程序"和"所需的程序”之间的差异。
2、适配器模式分为类适配器模式(使用继承)、对象适配器模式(使用委托)。
3、UML关系类图
(1)类适配器模式类图
(2)对象适配器模式的关系类图
二、代码实现
代码共同的实现目标是,将字符串"wjwlh"输出字符串"*wjwlh*"
(1)类适配器模式代码
1、Target角色
//打印接口------需求的目的接口
//Target角色(对象角色)
public interface Print {
public abstract void printWeak();
public abstract void printStrong();
}
2、Adaptee角色
//被继承类(Banner类-----横幅)-----需要被适配的类
//Adaptee角色(被适配角色)
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+"*");
}
}
3、Adapter角色
//中间适配器类(将Banner中的方法封装到Print接口的方法中,使Banner类中的方法隐藏起来)
//Adpater角色(适配器角色)
public class PrintBanner extends Banner implements Print{
public PrintBanner(String string) {
super(string);
}
@Override
public void printWeak() {
showWithParen();
}
@Override
public void printStrong() {
showWithAster();
}
}
4、Client角色(类适配器模式测试类)
//测试使用继承的适配器--------类适配器模式
//Client角色(请求者)
public class ClassAdpaterTest {
public static void main(String[] args) {
Print p=new PrintBanner("hello");
p.printWeak();
p.printStrong();
}
}
(2)对象适配器模式代码
1、Target角色
//打印接口------需求的目的接口(Target)
//Target角色
public abstract class Print {
public abstract void printWeak();
public abstract void printStrong();
}
2、Adaptee角色
//被继承类(Banner类-----横幅)-----需要被适配的类(Adaptee)
//Adaptee角色
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+"*");
}
}
3、Adapter角色
//适配器类(adapter)
//adpater角色
public class PrintBanner extends Print{
private Banner banner;
public PrintBanner(Banner banner) {
this.banner=banner;
}
@Override
public void printWeak() {
banner.showWithParen();
}
@Override
public void printStrong() {
banner.showWithAster();
}
}
4、Client角色
//对象适配器模式测试类(Client)
//Client角色
public class ObjectAdapterTest {
public static void main(String[] args) {
Banner banner=new Banner("lihao");
PrintBanner printBanner=new PrintBanner(banner);
printBanner.printStrong();
printBanner.printWeak();
}
}