使用Adapter(适配器)模式兼容原本不兼容

这个模式有些模糊,作用就是匹配二者不同,其实通过修改代码可以更简洁的实现修改,但是问题出在如果不能修改代码的时候,我们应该怎么办?

先看看代码,首先是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了。你还费解不?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值