JDK中的适配器模式(1)-------------【Java基础】

    xiaoxiao2022-07-14  151

    适配器模式在JDK中的使用,大概有这些

    java.util.Arrays #asList() javax.swing.JTable (TableModel) java.io.InputStreamReader (InputStream) java.io.OutputStreamWriter (OutputStream) javax.xml.bind.annotation.adapters.XmlAdapter #marshal() javax.xml.bind.annotation.adapters.XmlAdapter #unmarshal()

     

     

    一开始,我认为(潜意识)适配器模式就是继承接口,在不同的子类中有不同的实现。

    但是,我看到的是,

    @SafeVarargs @SuppressWarnings("varargs") public static <T> List<T> asList(T... a) { return new ArrayList<>(a); }

     

    接着看下ArrayList在哪,按住ctrl+左击,

     

    额,怎么看都和我想象的适配器模式不同哎。

    一不小心翻到《Java与模式》  第22章 适配器\(Adapter\)模式 ,

     

     

    原来,适配器模式有两种,分别为:类适配器和对象适配器。如下图,(左为类适配器,右为对象适配器)

     

    那么,

    看到我画的红圈圈吗,知道它们之间的区别是什么吗?

    答案:空心三角,其实是用例与用例之间的关系;而箭头则是角色与用例的关系;

     

     

    那么这里应该是类适配器。至于为什么,你先看,

     

    这个是对象适配器的,别搞混了。。。

     

    不知道你对适配器模式清晰没。。。这本书超好的。。。

     

    额外的知识点:

    java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用。Arrays.asList() 方法使用场景

      Arrays工具类提供了一个方法asList, 使用该方法可以将一个变长参数或者数组转换成List 。但是,生成的List的长度是固定的;能够进行修改操作(比如,修改某个位置的元素);不能执行影响长度的操作(如add、remove等操作),否则会抛出UnsupportedOperationException异常。

      所以 Arrays.asList 比较适合那些已经有数组数据或者一些元素,而需要快速构建一个List,只用于读取操作,而不进行添加或删除操作的场景。

     

    如果你还不了解的话,可以接着看下篇。

     

    参考资料:

    JDK1.8源码(四)——java.util.Arrays 类

    JDK里的设计模式

    Java与模式

    最新回复(0)