设计模式-适配器模式
定义
将一个或多个类或接口转换成客户端需求的另一种的类或接口,在不修改双方的情况下使得两个类或接口能在一起工作
UML
-
用继承的关系 1对1的适配
-
对象组合的方式 实现多对1的适配
优点
- 提高类的复用度(主要是在不修改当前设计的前提下扩展)
- 灵活性好,可以适应多种情况下的动态扩展以及卸载
缺点
- 空
实现
假设场景:原系统中已经设计好的了商品设计,目前需要接入第三方商品库系统
- 原系统中的设计
public interface IGoodInfo {
String getName();
String getPic();
Long getWeight();
}
@Data
public class GoodInfo implements IGoodInfo {
@Override
public String getName() {
System.out.println("商品名称是XXX");
return null; }
@Override
public String getPic() {
System.out.println("商品的图片是XXX");
return null; }
@Override
public Long getWeight() {
System.out.println("商品的重量是XXX");
return null; }
}
- 第三方系统接口
public interface IJdGoodInfo {
String getJdGoodName();
String getJdGoodPic();
Integer getJdGoodWeight();
}
public class JdGoodInfo implements IJdGoodInfo {
@Override
public String getJdGoodName() {
System.out.println("返回JD的商品名称");
return null; }
@Override
public String getJdGoodPic() {
System.out.println("返回JD的商品图片");
return null; }
@Override
public Integer getJdGoodWeight() {
System.out.println("返回JD的商品重量");
return null; }
}
- 使用继承的Adapter
/**
* 使用类继承实现对象适配
* */
public class FromIJdGoodInfo extends JdGoodInfo implements IGoodInfo {
@Override
public String getName() {
return super.getJdGoodName();
}
@Override
public String getPic() {
return super.getJdGoodPic();
}
@Override
public Long getWeight() {
return Long.parseLong(super.getJdGoodWeight().toString());
}
}
- 使用对象组合的方式Adapter
/**
* 使用对象组合的的方式实现适配
*/
public class FromJdGoodInfoUseComb implements IGoodInfo {
private IJdGoodInfo jdGoodInfo;
public FromJdGoodInfoUseComb(IJdGoodInfo jdGoodInfo) {
this.jdGoodInfo = jdGoodInfo;
}
@Override
public String getName() {
return jdGoodInfo.getJdGoodName();
}
@Override
public String getPic() {
return jdGoodInfo.getJdGoodPic();
}
@Override
public Long getWeight() {
return Long.parseLong(jdGoodInfo.toString());
}
}
扩展
- 是一个补偿模式,通常解决借口不相容以及老系统中增加新需求但不修改原有设计的时候
使用场景
- 对象组合的方式使用范围广泛,更加灵活
来源:oschina
链接:https://my.oschina.net/u/4212153/blog/3159482