我对于适配器模式的理解

概念

在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类能在一起工作,做法是将类自己的接口包裹在一个已存在的类中。引用自wiki

介绍使用

适配器模式总共由三个角色组成,分别是目标对象Target,被适配对象Adaptee和适配器Adapter。总共有两种类型,分别是类适配器模式,对象适配器模式。

  1. 类适配器模式:适配器继承目标对象,实现被适配对象的接口,java没有多继承,所以采用实现接口的方式。查看实例代码如下:
 // 目标类 typec充电口
 abstract class TypecCharger {
		public abstract void typecCharge();
	}
  // 被适配器充电口
    interface CommonCharger {
	 void commonCharge();
	}
    // 充电转接口
    class ChargerAdapter extends TypecCharger implements CommonCharger {
		@Override
		public void typecCharge() {
			commonCharge();
		}

		@Override
		public void commonCharge() {
			System.out.println("充电");
		}
	}
	// 调用代码如下
	public void charge() {
		TypecCharger typecCharger = new ChargerAdapter();
		typecCharger.typecCharge();
	}

typec充电口和普通充电口不兼容,最终想实现的目的是可以使有typec充电口的手机使用普通充电器经过转接头顺利充电。所以typec充电口就是目标类,普通充电器就是被适配对象,转接头就是适配器。在这里是使用了类适配器模式去实现的,不过有点牵强。这个例子使用对象适配器更合适一些。

  1. 对象适配器模式:适配器继承自目标类,并且包含一个被适配的对象的实例。代码如下:
    // 充电转接口
    class ChargerAdapter extends TypecCharger {
    	CommonCharger commonCharger;
    	
    	public ChargerAdapter(CommonCharger commonCharger) {
    		this.commonCharger = commonCharger;
    	}
    	    	
		@Override
		public void typecCharge() {
			commonCharger.commonCharge();
		}
		
	}
	// 调用代码如下
	public void charge() {
		TypecCharger typecCharger = new ChargerAdapter(new AndroidCommonCharger());
		typecCharger.typecCharge();
	}

这样一来就好理解一点了,适配器里面包装了被适配对象,真正的执行逻辑有被适配对象实现,适配器只是做个类似中转的角色,委托给被适配对象。

想法

在平时安卓开发过程中,用的最多的就是recycleview和adapter做列表的渲染,最早接触适配器模式,我也是想到这个例子,但是去看了相关的文章,总觉得不是很对的上。所以自己就从概念上的角色去分析, 个人觉得recycleview中的角色分工如下:数据源是被适配对象Adaptee, 渲染得到的view是目标对象Target,adapter就是适配器角色。 数据源在adapter内部通过onBindViewHolder, onCreateViewHolder把数据转化为目标对象——列表的view,从而得到的view就可以交由recycleview去渲染了。也就是从不相关不兼容的数据通过adapter转为兼容的view给recycleview。当然,这个是个人觉得比较合理的理解,欢迎大家交流讨论。

参考

wiki——适配器模式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值