设计模式-适配器模式

╄→гoц情女王★ 提交于 2020-02-25 16:07:46

设计模式-适配器模式

定义

将一个或多个类或接口转换成客户端需求的另一种的类或接口,在不修改双方的情况下使得两个类或接口能在一起工作
UML
  1. 用继承的关系 1对1的适配

  2. 对象组合的方式 实现多对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());  
  }  
}

扩展

  • 是一个补偿模式,通常解决借口不相容以及老系统中增加新需求但不修改原有设计的时候

使用场景

  • 对象组合的方式使用范围广泛,更加灵活
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!