定义:
将一个类的接口装换成客户期望的另一个接口,使原本接口不兼容的类可以一起工作。(结构型)
应用场景:
1.已经存在的类,它的方法和需求不匹配时(方法结果相同或者相似)
2.不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品,不同厂家造成功能类似而接口不相同情况下的解决方案。
优点:
1.能提高类的透明性和复用,现有的类的复用但不需要改变。
2.目标类和适配器类解耦,提高程序的扩展性。
3.符合开闭原则。
缺点:
1.适配器编写过程需要全面考虑,可能会增加系统复杂度
2.增加代码可读的难度
扩展:
1.对象适配器
2.类适配器
Coding:
被适配对象方法:
public class Adaptee {
public void adapteeRequest(){
System.out.println("被适配的方法");
}
}
目标方法接口:
public interface Target {
void request();
}
目标方法实现:
public class ConcretTarget implements Target {
@Override
public void request() {
System.out.println("ConcretTarget目标方法");
}
}
类适配器方式--通过继承适配:
public class Adater extends Adaptee implements Target {
//将Adaptee的adapteeRequest方法适配给Target
@Override
public void request() {
//前后可以添加各种逻辑代码
//.....
super.adapteeRequest();
//.....
}
}
类适配UML:
类适配.png对象适配器--通过组合方式适配:
/**
* 通过组合的方式adaptee
*/
public class Adater implements Target {
Adaptee adaptee = new Adaptee();
//将Adaptee的adapteeRequest方法适配给Target
@Override
public void request() {
//前后可以添加各种逻辑代码
//.....
adaptee.adapteeRequest();
//.....
}
}
对象适配器UML:
对象适配器.png 微信公众号欢迎关注.jpg
网友评论