}
}
//需要适配的类(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学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!