适配器模式:简单来说就是想通过Target中Request()方法调用Adaptee中specialRquest()方法。
实现思路:
1、在一个接口Target里有一个普通的request()方法;还有一个已存在接口Adaptee(多个实现类)或类Adaptee,里有特殊方法。
2、想要通过调用接口Target普通方法调用已存在类Adaptee里面的方法,就要创建一个特殊的实现类实现接口Target。这个特殊的实现类就叫做适配器。将想要调用的的类Adaptee的对象传入适配器,并在适配器的方法中调用Adaptee的特殊方法。这样就可以利用接口Target的对象调用普通request方法就可以调用类Adaptee中的特殊方法了。
例子为大话设计模式中的例子:
package adapter_pattern;
public abstract class Player {
//接口
protected String name;
public Player(String name) {
this.name = name;
}
abstract void attack();
abstract void defend();
}
******************************************************************
package adapter_pattern;
public class Forward extends Player {
//接口实现类,里面为普通方法
public Forward( String name) {
super(name);
}
void attack(){
System.out.println(name+" Attack!");
}
void defend(){
System.out.println(name+" Defend!");
}
}
**********************************************************************
package adapter_pattern;
public class ForeignCenter {
private String name;
//已存在的类里面的方法为特殊方法。
public ForeignCenter(String name) {
this.name = name;
}
void jingong(){
System.out.println(name+"进攻!");
}
void fangshou(){
System.out.println(name+"防守!");
}
}
********************************************************
package adapter_pattern;
public class Translator extends Player{
//对接口类的特殊实现。传入或创建想要调用类的对象
public Translator(String name) {
super(name);
}
ForeignCenter fc=new ForeignCenter(name);//特殊类的对象
@Override
void attack() {
fc.jingong();
}
@Override
void defend() {
fc.fangshou();
}
}
**************************************************************
package adapter_pattern;
public class Test {
//测试类。
public static void main(String[] args) {
Player p1=new Forward("麦迪");
p1.attack();
Player p2=new Translator("姚明");
p2.attack();
p2.defend();
}
}
注意: 适配器模式是“不得已而为之”,是在后期实在没办法才用。前期设计时最好不要用,实在不行就重新设计。