设计模式(结构型)之适配器模式(Adapter Pattern)

}

}

//需要适配的类(Adaptee)

class MonkeyAndroidAdaptee {

public void codingAndroid() {

System.out.println(“Can code Android!”);

}

}

//适配器(Adapter)

class SkillAdapter extends MonkeyHoleTarget {

private MonkeyAndroidAdaptee mMonkeyAndroidAdaptee;

public SkillAdapter(MonkeyAndroidAdaptee target) {

mMonkeyAndroidAdaptee = target;

}

public void codingAll() {

mMonkeyAndroidAdaptee.codingAndroid();

}

}

public class Main {

public static void main(String[] args) {

MonkeyHoleTarget monkeyHoleTarget = new SkillAdapter(new MonkeyAndroidAdaptee());

monkeyHoleTarget.codingAll();

}

}

类适配器模式 的代码实例:

具体代码含义和上面类似。

package yanbober.github.io;

//目标接口(Target)

interface MonkeyHoleTarget {

void codingAll();

}

//需要适配的类(Adaptee)

class MonkeyAndroidAdaptee {

public void codingAndroid() {

System.out.println(“Can code Android!”);

}

}

//适配器(Adapter)

class SkillAdapter implements MonkeyHoleTarget {

private MonkeyAndroidAdaptee mMonkeyAndroidAdaptee;

public SkillAdapter(MonkeyAndroidAdaptee mMonkeyAndroidAdaptee) {

this.mMonkeyAndroidAdaptee = mMonkeyAndroidAdaptee;

}

@Override

public void codingAll() {

mMonkeyAndroidAdaptee.codingAndroid();

}

}

public class Main {

public static void main(String[] args) {

MonkeyHoleTarget monkeyHoleTarget = new SkillAdapter(new MonkeyAndroidAdaptee());

monkeyHoleTarget.codingAll();

}

}

升级一把


适配器模式除了上面介绍的以外还有一个更加牛逼常用的变体(基因突变啊)!如下所述:

缺省适配器模式(Default Adapter Pattern)

当不需要实现一个接口所提供的所有方法时,可先设计一个抽象类实现该接口,并为接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可以选择性地覆盖父类的某些方法来实现需求,它适用于不想使用一个接口中的所有方法的情况,又称为单接口适配器模式。

缺省适配器模式重要核心模块:

ServiceInterface(适配者接口)

它是一个接口,通常在该接口中声明了大量的方法。

AbstractServiceClass(缺省适配器类)

它是缺省适配器模式的核心类,使用空方法的形式实现了在ServiceInterface接口中声明的方法。通常将它定义为抽象类,因为对它进行实例化没有任何意义。

ConcreteServiceClass(具体业务类)

它是缺省适配器类的子类,在没有引入适配器之前,它需要实现适配者接口,因此需要实现在适配者接口中定义的所有方法,而对于一些无须使用的方法也不得不提供空实现。在有了缺省适配器之后,可以直接继承该适配器类,根据需要有选择性地覆盖在适配器类中定义的方法。

代码实战一把

如下演示了缺省适配器的代码示例,技能太多,所以只关心自己要的技能,具体不说了。

package yanbober.github.io;

//目标接口(Target)

interface MonkeyHoleTarget {

void codingAll();

void codingAndroid();

void codingIOS();

void codingPHP();

void codingCLanguage();

void codingScriptShell();

}

//默认适配器

class BaseAdapter implements MonkeyHoleTarget {

@Override

public void codingAll() {

}

@Override

public void codingAndroid() {

}

@Override

public void codingIOS() {

}

@Override

public void codingPHP() {

}

@Override

public void codingCLanguage() {

}

@Override

public void codingScriptShell() {

}

}

//需要适配的类(Adaptee)

class MonkeyAndroidAdaptee {

public void codingAndroid() {

System.out.println(“Can code Android!”);

}

}

//适配器(Adapter)只关心自己感兴趣的部分方法

class SkillAdapter extends BaseAdapter {

private MonkeyAndroidAdaptee mMonkeyAndroidAdaptee;

public SkillAdapter(MonkeyAndroidAdaptee mMonkeyAndroidAdaptee) {

this.mMonkeyAndroidAdaptee = mMonkeyAndroidAdaptee;

}

@Override

public void codingAll() {

mMonkeyAndroidAdaptee.codingAndroid();

}

}

public class Main {

public static void main(String[] args) {

MonkeyHoleTarget monkeyHoleTarget = new SkillAdapter(new MonkeyAndroidAdaptee());

monkeyHoleTarget.codingAll();

}

}

总结一把


适配器模式优点:

  • 将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构。

  • 增加了类的透明性和复用性,将具体的业务实现过程封装在适配者类中,对于客户端类而言是透明的,而且提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用。

  • 灵活性和扩展性都非常好,可以很方便地更换适配器。

  • 一个对象适配器可以把多个不同的适配者适配到同一个目标。

  • 可以适配一个适配者的子类,由于适配器和适配者之间是关联关系,根据“里氏代换原则”,适配者的子类也可通过该适配器进行适配。

适配器模式缺点:

  • 类适配器模式对于不支持多重类继承的语言,一次最多只能适配一个适配者类,不能同时适配多个适配者。

  • 适配者类不能为最终类,如在Java中不能为final类。

结尾

最后,针对上面谈的内容,给大家推荐一个Android资料,应该对大家有用。

首先是一个知识清单:(对于现在的Android及移动互联网来说,我们需要掌握的技术)

泛型原理丶反射原理丶Java虚拟机原理丶线程池原理丶
注解原理丶注解原理丶序列化
Activity知识体系(Activity的生命周期丶Activity的任务栈丶Activity的启动模式丶View源码丶Fragment内核相关丶service原理等)
代码框架结构优化(数据结构丶排序算法丶设计模式)
APP性能优化(用户体验优化丶适配丶代码调优)
热修复丶热升级丶Hook技术丶IOC架构设计
NDK(c编程丶C++丶JNI丶LINUX)
如何提高开发效率?
MVC丶MVP丶MVVM
微信小程序
Hybrid
Flutter

接下来是资料清单:(敲黑板!!!


1.数据结构和算法

2.设计模式

3.全套体系化高级架构视频;七大主流技术模块,视频+源码+笔记

4.面试专题资料包(怎么能少了一份全面的面试题总结呢~)

不论遇到什么困难,都不应该成为我们放弃的理由!共勉~

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。


《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
]

3.全套体系化高级架构视频;七大主流技术模块,视频+源码+笔记

[外链图片转存中…(img-uysSJWJQ-1715394014117)]

4.面试专题资料包(怎么能少了一份全面的面试题总结呢~)

[外链图片转存中…(img-Hch7QHqq-1715394014118)]

不论遇到什么困难,都不应该成为我们放弃的理由!共勉~

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

[外链图片转存中…(img-zsDmbkPh-1715394014118)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值