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

    ​ 先不说定义,说到适配器,我们首先可能会想到笔记本电脑的电源适配器,这里存在三种角色

    • 第一种是就是笔记本电脑,他需要直流 5V 1A的电源(瞎写的,顺便吐槽一下祖传5V1A)
    • 第二种是家里用的电源,市电,交流220V
    • 第三种就是电源适配器,它可以把交流转换为直流。

    ​ 很明显市电无法直接作为电源提供给笔记本电脑,电源适配器起到了连接作用,在这里电源适配器改变了电源的交直流,使得市电能够为笔记本所用,下面来看代码中的一个场景,我们有一个Data类,里面有个list存放了一些数据

    public class Data {
        List<String> list;
        Data(){
            //初始化list 从不可描述的地方获取数据
        }
        public List<String> getData(){
            return list;
        }
    }
    

    现在有个类需要获取JSON格式的数据,我们就可以适配出JsonData类

    public class JsonData  {
        private Data data;
        JsonData(Data data){
            this.data = data;
        }
        public String getData(){
            // toJson在这里是一个把list转换为Json的函数
            String json = toJson(data.getData());
            return json;
        }
    }
    

    按照上面实际例子的三种角色,第一种是终端需要获得Json字符串,第二种是Data能提供List,第三种就是JsonData能够把List转为Json。

    ​ 适配器模式(Adapter)也叫做包装器模式(Wrapper),我们在适配的时候可能不会改变什么只是简单的包装一下,比如你喜欢上了另一个喜欢萌妹的汉子,但是你又不能变成萌妹怎么办,你可以选择穿上萌妹的衣服接近他,这里本质是没有改变的,你只是简单的包装了一下。另一个代码例子如下,从前有个人叫张三他特别喜欢Rap

    public interface Play {
        public void play();
    }
    
    public class Zhang3 implements Rap{
        @Override
        public void R() {
            System.out.println("淡黄的长裙,蓬松的头发");
        }
    }
    

    有一天他们的好朋友赵四找张三出去玩,可想要玩需要继承Play接口,张三只继承了Rap接口只会Rap,不会玩啊,这可怎么办呢?

    public interface Play {
        public void play();
    }
    
    public class Zhang3Wrapper implements Play {
        Zhang3 z3 = new Zhang3();
        @Override
        public void play() {
            z3.R();
        }
    }
    

    既然需要实现Play接口的才能玩,但是我张三只会Rap,这时就需要包装器出场了,继承了Paly接口就可以玩了,play方法里调用的还是Rap,因为张三只会Rap,这样就在不改变张三的情况下,适配了出去玩这件事情。例子举得有点奇怪,可能加深了理解难度,毕竟也没人看,不把自己绕蒙了就好。

    总结

    ​ 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。在不改变原有类的情况下解决兼容问题,符合开闭原则。纯属个人理解,如果给读者造成误解,请多担待。

  • 相关阅读:
    Microsoft Visio 2013 简体中文版
    visio2013产品密钥激活
    WebConfigurationManager和ConfigurationManager区别
    错误 the type "xxxx" is defined in an assembly that is not refernced.You must add a reference to assem
    Windows10安装oracle 19c数据库+PLsql详细安装过程
    js 三个input输入框,组合查询。
    Vue.js组件教程 https://www.jb51.net/Special/926.htm
    LeetCode刷题之路
    涉猎---Java多线程
    深信服翔鹰计划线上笔试考察点总结(路由,虚拟架构,IPV4,Tcp/IP......)
  • 原文地址:https://www.cnblogs.com/ljsh/p/12795611.html
Copyright © 2011-2022 走看看