这个模式有些模糊,作用就是匹配二者不同,其实通过修改代码可以更简洁的实现修改,但是问题出在如果不能修改代码的时候,我们应该怎么办?
先看看代码,首先是2个接口:
package moshi.adapter;
public interface SayGood {
public void sayGood();
}
package moshi.adapter;
public interface SayHello {
public void sayHello();
}
一个Hello,一个Good。下面2个代码分别实现它们:
package moshi.adapter;
public class SayGoodImp implements SayGood {
public void sayGood() {
System.out.println("Goog");
}
}
package moshi.adapter;
public class SayHelloImp implements SayHello {
public void sayHello() {
System.out.println("Hello");
}
}
怎么样让SayGood里也能说sayHello?我们可以改代码。
package moshi.adapter;
public class SayGoodImp implements SayGood,SayHello{
public void sayGood() {
System.out.println("Goog");
}
public void sayHello() {
System.out.println("Hello");
}
}
我们让这个类实现这2个接口,问题解决,但是如果强制我们不修改SayGoodImp类的代码怎么办?我们就不能实现SayHello这个接口了。我们只能写个Adapter(适配器)。
package moshi.adapter;
public class SayGoodApapter implements SayHello {
//定义SayHello引用
private SayHello sayHello;
//进行初始化注入
public SayGoodApapter(SayHello sayHello){
this.sayHello=sayHello;
}
//转移依赖性
public void sayHello() {
sayHello.sayHello();
}
}
哈哈,其实也就是变相的改代码。转移一下依赖性。OK,看看怎么使用:
package moshi.adapter;
public class TestSayGood {
public static void main(String[] args) {
SayGoodApapter SayGoodApapter=new SayGoodApapter(new SayHelloImp());
SayGoodApapter.sayHello();
}
}
呵呵,把SayHello注入到SayGoodApapter类中。这个时候SayGood也能说声SayHello了。你还费解不?