适配器模式
仅为记录,仅供参考
对象器模式结构
Target(目标抽象类)目标抽象类定义客户所需要的接口,可以是一个抽象类或者接口,也可以是具体类。
Adapter(适配器类)可以调用另一个接口,作为一个转换器
Adapter(适配者类)定义了一个已经存在的接口,这个接口需要适配,一般是具体类,包含了客户希望使用的方法
为什么要学这个模式?
因为比如你想用一个方法,但是你里面已经定义了接口,而且你没法直接把代码拿过来改。
所以你可能会想到,继承,继承了它你就什么都有了,就是类适配器。或者你还可以只调用它的方法。这是对象适配器
适配器分类
类适配器
类适配器因为要继承适配者类,在 Java里面不允许多重继承,所以只能实现接口,而不能继承类。而且只能继承一个适配者类。
对象适配器
对象适配器通过关联适配者类,然后再实现接口,也可以继承类。
缺省适配器
用途?
当你想要一个接口里面的某一个或者只是其中几个方法,如果你直接实现这个接口。还要为其他的方法也写一个默认实现。你有可能会想到,如果你用一个类去继承一个类,这个类可以是抽象类,也可以是具体类。你并不需要给里面所有的方法都提供一个实现。所以你可以选择建一个抽象类去继承这个接口。抽象类对这个接口的所有方法都给个默认实现,然后你再用一个类去继承这个抽象类,对你想要实现的方法写个实现就可。
用途:简化了代码?
双向适配器
用途?
当目标类需要调用适配者类里面的方法,适配者类也需要调用目标类里面的方法。某种角度来说就是它们互为适配者类
思路:我们先试试考虑在目标类中能够使用适配者类的方法,能够用类适配器或对象适配器实现。那我们该如何在适配者类中也能使用到目标类的方法呢?我们把原来的目标类和原来的适配器类互换行不行?适配器类实现或继承适配者类,然后再关联目标类。
假如我们刚开始使用的是类适配器,也就是适配器类实现目标类,继承适配者类。现在要把原适配者类当作目标类,所以适配器类实现原适配者类。然后还要把原目标类当成适配者类,因为Java不支持多重继承,适配器类要关联原目标类。
假如我们开始使用的是对象适配器。适配器类关联适配者类,然后实现目标类。现在把原适配者类当作目标类,所以适配器类实现原适配者类。然后把原目标类当成适配者类,你可以选择用适配器类去关联原目标类,也可以去继承原目标类。
总结:所以我们这里一共有两种可能,因为有两种方法重复了。
适配器模式的优点
- 将目标类与适配器解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构。
- 增加了类的透明性和复用性。将具体的业务实现过程封装到适配者类中
- 灵活性和扩展性非常好。可以通过修改配置文件很方便地更换适配器
对象适配器模式还有以下优点:
- 一个对象适配器可以把多个不同的适配者适配到一个目标。(因为它是通过关联,可以关联多个适配者类)
- 可以适配一个适配者的子类,由于适配器和适配者之间是关联关系,根据里氏代换原则,适配者的子类也可通过该适配器进行适配