适配器设计模式记录

UserInterface:目标角色——目标接口,系统所期待实现的目标;

UserInfo:源角色——当前已经存在的原有的实现类,即将被适配的类;

UserAdapter:适配器角色——将原有实现装换为目标接口的实现。

简单点说,适配器模式是指:定义一个类,将一个已经存在的类,转换成目标接口所期望的行为形式。

在具体的实现过程中,又可以基于其实现层次是类层次还是对象层次,将其分为类适配器和对象适配器。

一,类适配器

假设系统存在一个现有的类UserInfo:

  class UserInfo {
  
      private Map<String, String> userBaseInfo;
  
      public Map getUserBaseInfo() {
          return userBaseInfo;
      }
  
      public void setUserBaseInfo(Map<String, String> userBaseInfo) {
         this.userBaseInfo = userBaseInfo;
     }
 }

客户端可以通过如下方式set、get员工基本信息:

  public class AdapterTest {
  
      public static void main(String[] args) {
          
          UserInfo oui = new UserInfo();
          Map<String, String> inUserInfo = new HashMap<String, String>() {
              {
                  put("name", "corn");
                  put("telNumber", "170xxxxxxxx");
             }
         };
         oui.setUserBaseInfo(inUserInfo);
 
         // 原有取得员工基本信息的方式
         Map<String, String> outUserInfo = oui.getUserBaseInfo();
         String name = outUserInfo.get("name");
         String telNumber = outUserInfo.get("telNumber");
         
     }
 }

有一天,基于某种原因(也许你看着这种取数据的方式不太爽,也许是系统间数据交换的原因等),你需要按照如下接口的方式取数据:

目标员工接口:

interface UserInterface {
 
     public String getName();
 
     public String getTelNumber();
 
 }

那么,现在的问题是,如何将一个既定的类转换成按照目标接口的所期望的行为形式呢?

具体怎样实现呢,可以通过如下方式进行:

  class UserAdapter extends UserInfo implements UserInterface {
  
      @Override
      public String getName() {
          return (String) super.getUserBaseInfo().get("name");
      }
  
      @Override
      public String getTelNumber() {
         return (String) super.getUserBaseInfo().get("telNumber");
     }
 
 }

二,对象适配器

  class UserAdapter implements UserInterface {
      
      private UserInfo userInfo;
      
      public UserAdapter(){
          
      }
      
      public UserAdapter(UserInfo userInfo){
         this.userInfo = userInfo;
     }
 
     @Override
     public String getName() {
         return (String) userInfo.getUserBaseInfo().get("name");
     }
 
     @Override
     public String getTelNumber() {
         return (String) userInfo.getUserBaseInfo().get("telNumber");
     }
 
 }

总体而言:适配器模式是指定义一个适配器类,将一个已经存在的类,转换成目标接口所期望的行为形式。同时,一般来说,基于更多的推荐使用组合而不是继承,因此,对象适配器可能使用更多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值