用于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接口。

在以下场景中需要适配器模式:

假设您已使用方法M1M2定义了接口I1

C1C2实现了这个接口I1 ,现在用于C1同时实现M1M2你没有找到其他现有类的帮助,所以你需要自己编写所有逻辑。

现在,在实现C2类时,您遇到了C3类,其中方法M3M4可用于实现C2 M1M2 ,因此为了利用C2类中的M3M4 ,您可以扩展C3类并使用C3 M3M4

在此示例中, C2变为Adapter classC3变为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"); } } 

有关适配器模式的真实示例,请查看我对此堆栈溢出问题的答案。