适配器模式
Posted wly1-6
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了适配器模式相关的知识,希望对你有一定的参考价值。
适配器模式的定义:将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够一起工作。
图解:
A、B两个图框代表已经塑模成型的物体A和物体B,现在要求把A和B安装在一起使用,如何安装?两者的接口不一致,是不可能安装在一起使用的,那怎么办?引入一个物体C,如下:
引入物体C后,C适应了物体A的接口,同时也适应了物体B的接口,然后三者就可以组合成一个完整的物体;其中物体C就是适配器。
适配器模式的三个角色:
Target目标角色:客户端所调用的接口;
Adaptee源角色:你想把谁转换成目标角色,这个谁就是Adaptee;
Adapter适配器角色:适配器模式的核心角色,其他两个角色都是已经存在的角色,而适配器角色是需要新建立的,他的职责非常简单:把源角色转换为目标角色(通过类继承或者类关联的方式);
适配器模式的两种情况:
类适配器:类适配器是类间继承;
Target角色:
public interface Target { /** * 目标角色已有的方法 */ void request(); }
public class ConcreteTarget implements Target { @Override public void request() { System.out.println("If you need any help,pls call me!"); } }
Adaptee源角色:
public class Adaptee { /** * 原有的业务逻辑 */ public void doSomething(){ System.out.println("I‘m kind of busy,leave me alone,pls!"); } }
Adapter适配器角色:
public class Adapter extends Adaptee implements Target { @Override public void request() { super.doSomething(); } }
客户端调用:
public class Client { public static void main(String[] args) { //原有的业务逻辑 Target target = new ConcreteTarget(); target.request();//If you need any help,pls call me! //增加适配器后的逻辑 Target target1 = new Adapter(); target1.request();//I‘m kind of busy,leave me alone,pls! } }
对象适配器:是对象的合成关系,也可以说是类的关联关系(用到的场景较多)
Target角色和Adaptee源角色同类适配器一样,此处省略,唯一不一样的地方在于适配器类Apdater的编写
Adapter适配器:
public class Adapter implements Target { /** * 此处本应使用接口接收,但是源角色只有类,没有接口,故使用类 */ private Adaptee adaptee = null; public Adapter(Adaptee adaptee){ this.adaptee = adaptee; } @Override public void request() { adaptee.doSomething(); } }
适配器模式的注意事项:
适配器模式最好在详细设计阶段不要考虑它,他不是为了解决还处在开发阶段的问题,而是解决正在服役的项目问题;还有一点,项目一定要遵守依赖倒置原则和里氏替换原则,否则即使再适合使用适配器的场合下,也会带来非常大的改造
以上是关于适配器模式的主要内容,如果未能解决你的问题,请参考以下文章