GOF23之适配器模式

一、核心作用

将一个类的接口转换为客户希望的接口
使原本接口不兼容而不能一起工作的类可以在一起工作

二、常见应用场景:

1、java.io.InputStreamReader(InputStream)
2、java.io.OutputStreamWriter(OutputStream)

三、适配器模式角色

• 目标角色(target):这是客户期待的接口,目标可以是具体的或抽象类,也可以是接口
• 适配器角色(adpater):将已有接口转换为目标接口
• 被适配者角色(adpatee):已有接口,但是与客户所期待的接口不兼容

四、适配器分类

1、类适配器模式:
2、对象适配器模式

五、代码示例:

一、类适配器模式:
目标对象:
package com.hezeu.adapter;

/**
* @Classname Target
* @Description 目标接口
* @Date 2020/2/22 下午 03:52
* @Created by 朱进博 [email protected]
*/
public interface Target {
        void handleReq();
}



类适配器:
package com.hezeu.adapter;

/**
* @Classname Adapter
* @Description 适配器(类适配器)
* @Date 2020/2/22 下午 03:57
* @Created by 朱进博 [email protected]
*/
public class Adapter extends Adaptee implements Target{

        @Override
        public void handleReq() {
                super.request();
        }
}

被适配者:
package com.hezeu.adapter;

/**
* @Classname Adaptee
* @Description 被适配类
* @Date 2020/2/22 下午 03:54
* @Created by 朱进博 [email protected]
*/
public class Adaptee {
        public void request(){
                System.out.println("可以完成客户请求的需要的功能!");
        }
}

二、对象适配器模式:
对象适配器:
package com.hezeu.adapter;

/**
* @Classname Adapter02
* @Description 适配器(对象适配器)
* @Date 2020/2/22 下午 04:10
* @Created by 朱进博 [email protected]
*/
public class Adapter02 implements Target{
        private Adaptee adaptee;

        public Adapter02(Adaptee adaptee) {
                this.adaptee = adaptee;
        }

        @Override
        public void handleReq() {
                adaptee.request();
        }
}

六、类适配器模式和对象适配器模式对比

优点:

类适配器模式:由于adapter类是适配者adaptee类的子类,因此可以在适配器中置换一些适配者的方法,使适配器的灵活性更强
对象适配器模式:一个对象适配器可以把多个不同的适配者adaptee适配到一个目标,也就是说,同一个适配器可以将适配者类和他的子类都适配到目标接口

缺点:

**类适配器:**不支持多继承,适配者类只有一个
对象适配器:想要修改适配者类的一个或多个方法,只好创建一个继承与适配者类的子类,把适配者方法置换掉,然后把适配者的子类当作真正的适配者进行适配,实现过程较为复杂

七、使用适配器模式的优缺点

优点:

  • 复用性:系统需要使用已经存在的类,功能符合系统要求,但是类的接口不符合系统要求,通过适配器可以解决不兼容问题,使这些功能得到复用
  • 扩展性:适配器使得系统多了一个方式扩展系统的功能
  • 耦合性:一定程度上解耦

缺点:

  • 过多的使用适配器,增加系统的理解成度

水平有限,如有错漏,还请不吝赐教

发布了5 篇原创文章 · 获赞 1 · 访问量 444

猜你喜欢

转载自blog.csdn.net/weixin_44789225/article/details/104446804