用于Java中的适配器模式
我一直在学习即将申请的初级开发角色的适配器和外观设计模式,因为我期待被问到我对我使用它的模式和时间的了解。 虽然模式本身似乎很直接 – 我正在努力想到实际用途,我可以在个人项目中使用它。
那么有人可以在一个小型的个人项目中提出一个使用它的想法吗?
该模式是否也出现在Java API中的任何位置?
对于在设计模式的Java API
的使用,请看这个问题。
引用Wikipedia
:
在计算机编程中,适配器模式(通常称为包装模式或简称包装器)是一种设计模式,它将类的一个接口转换为兼容接口。
所以你很少会使用它。 它只是调整两个不兼容的接口。
请记住,当您不需要设计模式时,请不要使用它。 只是因为它写在大书中,并不意味着它满足您的所有需求,您必须盲目地遵循它。
不确定这是否算作一个适配器(可能它比纯接口转换更多,将字节转换为字符),但是java.io.InputStreamReader
如何将InputStream转换为Reader?
也许java.util.concurrent.ExecutorService
是一个Facade,它隐藏了用户之间的线程,队列和Runnables之间的详细交互?
Head First Design模式使用以下单词开始关于适配器模式的章节:
在本章中,我们将尝试将一个方形钉子放入一个圆孔中。
目的是使[某些对象]界面看起来像他们不是的东西 。 我怀疑你在设计应用程序时使用这种模式。 如果您有现有的应用程序,并且需要使其与第三方库或工具一起使用,那么它非常有用。
我们都知道Java API中有一个适配器,尽管它非常隐蔽。 你得到的是Arrays
一个fectory方法:
Arrays.asList(T... a)
该方法返回Arrays.ArrayList
一个实例,该对象使数组适应List接口。
在以下场景中需要适配器模式:
假设您已使用方法M1
和M2
定义了接口I1
C1
和C2
实现了这个接口I1
,现在用于C1
同时实现M1
和M2
你没有找到其他现有类的帮助,所以你需要自己编写所有逻辑。
现在,在实现C2
类时,您遇到了C3
类,其中方法M3
和M4
可用于实现C2
M1
和M2
,因此为了利用C2
类中的M3
和M4
,您可以扩展C3
类并使用C3
M3
和M4
。
在此示例中, C2
变为Adapter class
, C3
变为adaptee
package com.design.patterns; public class AdapterExample { public static void main(String[] args) { Shape line = new LineShape(); line.draw(); Shape text = new TextShape(); text.draw(); } } //==Start from here interface Shape{ public void draw(); } class LineShape implements Shape{ @Override public void draw() { System.out.println("write some logic and draw line"); } } //Adapter class TextShape extends TextView implements Shape{ @Override public void draw() { System.out.println("logic is already there in class TextView"); drawText(); } } // Adaptee class TextView{ public void drawText() { System.out.println("Drawing Text Shape"); } }
有关适配器模式的真实示例,请查看我对此堆栈溢出问题的答案。
- 在Spring Boot中,通过扩展MappingJackson2HttpMessageConverter添加自定义转换器似乎覆盖了现有的转换器
- 我该如何调试Hadoop map reduce
- 根上下文和调度程序servlet上下文到底是如何进入Spring MVC Web应用程序的?
- ClassCastException:org.apache.xerces.parsers.XIncludeAwareParserConfiguration无法强制转换为org.apache.xerces.xni.parser.XMLParserConfiguration
- 从Java ExecutorService捕获线程exception
- Java string 部分复制
- persistence.xml中的Sequence Generator
- 单根类层次结构的优点
- 将大量小文件读入内存的最快方法是什么?