每天一个设计模式之(12)-----适配器模式

1.为什么要使用适配器模式

    假如我现在的系统运行良好,突然要和第三方公司的业务进行整合,比如我有一个User接口,里面定义了获取手机号,姓名等方法。但是第三方也有User接口,它只定义了获取用户信息的接口。那么我们就可以在自己系统和第三方系统之间新加一个适配器,让第三方信息能够无缝接入。

2.类图

140307_KoYF_3582320.png

3.实现

//自己本系统的接口
public interface User {

    String getUserName();
    String getMobile();
}

//第三方的实现类
public class OuterUser {

    public Map<String, String> getUserInfo(){
        Map<String, String> map = new HashMap<>();
        map.put("name","某某");
        map.put("mobile","12345678900");
        map.put("address","幸福路123号");
        return map;
    }
}


//适配器,在第三方系统和自己系统之间
public class UserAdapter extends OuterUser implements User{

    @Override
    public String getUserName() {
        return super.getUserInfo().get("name");
    }

    @Override
    public String getMobile() {
        return super.getUserInfo().get("mobile");
    }
}

main方法

/**
 * 适配器模式
 */
public class Main {

    public static void main(String[] args) {
        //这样即使接入了第三方也能符合自己系统的调用标准
        User user = new UserAdapter();
        user.getMobile();
        user.getUserName();
    }
}

    以上是类适配器,如果第三方对于User有两个不同功能的类,一个是获得用户姓名的Map方法,一个是获得用户手机的Map方法,怎么办?java不支持多继承啊。于是有了下面的对象适配器。(上面的叫做类适配器)。

4.对象适配器

    既然不能多继承,那我直接让你成为我的私有变量不就行了,因此也叫做对象适配器,就是把上的的UserAdapter改成如下即可

public class UserAdapter2 implements User{

    private OuterUser outerUser = new OuterUser();
    //简便起见,下面这个类就不写了
    //private OuterUser2 outerUser2 = new OuterUser2();

    @Override
    public String getUserName() {
        return outerUser.getUserInfo().get("name");
    }

    @Override
    public String getMobile() {
        return outerUser.getUserInfo().get("mobile");
        //假设mobile是由下面这个第三方的类实现的
        //return outerUser2.getUserInfo().get("mobile");
    }
}

 

转载于:https://my.oschina.net/u/3582320/blog/1475351

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值