
在程序世界中,经常会存在现有的程序无法直接使用,需要做适当的变换之后才能使用的情况。这种用于填补“现有的程序”和“所需的程序”之间差异的设计模式就是Adapter模式。
Adapter模式有以下两种:
- 类适配器模式(使用继承的适配器)
- 对象适配器模式(使用委托的适配器)
♦ Target( 对象)
该角色负责定义所需的方法。在示例程序中(图中的12伏特电源),由Print接口(使用继承时)和Print类(使用委托时)扮演此角色。
-
Print接口
public interface Print{
public abstract void printWeak();
public abstract void printStrong();
}
♦ Client( 请求者)
该角色负责使用Target角色所定义的方法进行具体处理。在示例程序中Main类扮演此角色。
-
Main()类
public class main(){
public static void main (String args[]){
Print p = new PrintBanner("hello");
p.printWeak();
p.printStrong();
}
}
♦ Adaptee( 被适配)
Adaptee是一个持有既定方法的角色(图中的100伏特电源)。在示例程序中,由Banner类扮演此角色。
-
Banner类
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+"*");
}
}
♦ Adapter( 适配)
Adapter模式的主人公。使用Adaptee角色的方法来满足Target角色的需求,这是Adapter模式的目的,也是Adapter角色(图中的适配器)的作用。在示例程序中,由PrintBanner类扮演这个角色。
-
PrintBanner类
public class PrintBanner extends Banner implements Print{
public PrintBanner(String string){
super(string);
}
public abstract void printWeak(){
ShowWithParen();
}
public abstract void printStrong(){
ShowWithAster();
}
}


网友评论