适配器模式:适配器模式是为了接口互相不兼容的类一起工作而产生的一种模式,对于具有多继承的语言,两种类型都可以实现;对于只有单继承,不能模拟多继承的语言,只能用对象适配器,比如C#,只能使用对象适配器;OC虽然是单继承,但是可以通过面相协议的编程模拟多继承,所以OC两种类型都可以实现。适配器应用的场景是把老接口的输出变成新接口,比如有一个老的庞大的系统需要使用新的接口更新,为了节省时间和成本,可以通过中间的适配器,让老的接口来调用新的接口,实现老系统的更新。适配器模式分为类适配器和对象适配器。
1.类适配器
类适配器继承被适配的类,实现原先类的接口,在适配器类里面的原先的类接口方法里面调用被适配者的方法,比如在method1里面调用AdapteeMethod1。
2.对象适配器
对象适配器不是继承被适配者,而是和被适配者是关联关系,也就是说适配器包含被适配者的对象,在适配器里面调用实现的方法的时候通过被适配者的对象调用被适配者里面的方法,例如:method1里面通过Adaptee的具体一个实例调用AdapteeMethod1方法。
以下图为列讲解适配器模式
上图是一个设置页面,每一个cell的变化不大,通常的做法是在cellForRowAtIndexPath里面判断分组及分组的行数来显示不同的cell样式,如果需求变化cell样式不变,变换位置及变换分组,那就需要在cellForRowAtIndexPath修改代码,不灵活,容易出错。我们可以使用面向模型的编程模式来解决,可以参考https://github.com/steven2008/-.git,我下面要讲的是适配器模式。面向模型的编程模式需要在cell里面根据不同的模型类型展示不同的cell样式,cell的通用型也不好,适配器模式在模型和cell直接通过适配器进行转换数据,让cell和模型不直接联系,这样就能达到cell的通用,cell和适配器都遵循相同的协议来获取数据。可参考代码:https://github.com/steven2008/DesignPattens.git
网友评论