zoukankan      html  css  js  c++  java
  • 适配器模式

      适配器模式的定义如下:将一个类的接口变换为客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式又叫变压器模式、包装器模式。

      适配器通常包含三个角色:

    • Target目标角色:该角色定义需要转换为哪个目标角色,也就是期望接口。
    • Adaptee源角色:你想把谁转换为目标角色,那个被转换的就是源角色,它是一个已经存在的运行良好的类,经过转换后成为一个崭新的靓丽的角色。
    • Adapter适配器角色:适配器的核心角色,其他两个都是已经存在的角色,而这个是需要手动新建的,用于将源角色转换为目标角色,怎么转?通过类继承或关联的方式。

    现在来看看通用示例代码:

    //目标角色
    public interface Target{
        public void request();
    }

      目标角色是一个已经正在运行的角色,你不可能去修改角色中方法,能做的只是去实现接口中的方法,而且通常情况下,目标角色是一个接口或抽象类,一般不会是一个实现类。

      下面是一个正在运行的目标角色:

    //目标角色的实现类
    public class ConcreateTarget implements Target{
        public void request(){
        }
    }

      下面是一个源角色,也是正在服役状态,它是一个正常的类:

    public class Adaptee{
        //原有的业务逻辑
        public void doSomething(){
        }
    }    

      核心角色出场了,那就是适配器角色:

    //这里是继承的方式,如果有多个源对象怎么办?对了,可以改成组合的方式!
    public
    class Adapter extends Adaptee implements Target{ public void request(){ super.doSomething(); } }

      场景类:

    public class Client{
        public static void main(String[] args){
            //原有的业务逻辑
            Target target = new ConcreateTarget();
            target.request();
            //增加了适配器之后的业务逻辑
            Target target2 = new Adapter();
            target2.request();
        }
    }

      适配器模式优点:

    • 适配器模式可以让两个没有任何关系的类运行在一起,只要适配器这个角色能搞定他们就行
    • 增加了类的复用性,源角色和目标角色相互不会影响,适配器也不会对两者有任何影响
    • 灵活性非常好,适配器类似于一个构件,想用就用,不用就删掉

    使用场景:

      修改一个已经投产定型的接口时,可以使用。需要注意的是,在系统详细设计阶段最好不要考虑,它不是为了解决开发阶段的问题,二是解决正在服役的项目中出现的问题,通过适配器模式,避免代码修改带来的风险。

  • 相关阅读:
    支付宝自研数据库OceanBase全球开放!淘汰甲骨文
    网易邮箱运维工程师岗位应聘笔试题
    Python中的10个常见安全漏洞及修复方法
    关于数据库性能优化的一些误区
    解密程序员招聘内幕
    JSP---第十次作业
    JSP----第九次作业
    JSP---第八次作业
    JSP---第七次作业
    第六次作业---JDBC连接数据库
  • 原文地址:https://www.cnblogs.com/loveBolin/p/9736495.html
Copyright © 2011-2022 走看看