如何在Java中实现可插拔适配器设计模式
我知道如何实现基本的适配器设计模式,也知道C#如何使用委托实现可插拔适配器设计。但是我找不到任何用Java实现的东西。你介意指出一个代码示例吗如何在Java中实现可插拔适配器设计模式,java,design-patterns,pluggable,Java,Design Patterns,Pluggable,我知道如何实现基本的适配器设计模式,也知道C#如何使用委托实现可插拔适配器设计。但是我找不到任何用Java实现的东西。你介意指出一个代码示例吗 提前感谢。可插拔适配器模式是一种创建适配器的技术,无需为需要支持的每个适配器接口创建新类 在Java中,这类事情非常简单,但是没有任何对象与您可能在C#中使用的可插入适配器对象对应 许多适配器目标接口都是功能接口——只包含一个方法的接口 当需要将此类接口的实例传递给客户端时,可以使用lambda函数或方法引用轻松地指定适配器。例如: interface
提前感谢。可插拔适配器模式是一种创建适配器的技术,无需为需要支持的每个适配器接口创建新类 在Java中,这类事情非常简单,但是没有任何对象与您可能在C#中使用的可插入适配器对象对应 许多适配器目标接口都是功能接口——只包含一个方法的接口 当需要将此类接口的实例传递给客户端时,可以使用lambda函数或方法引用轻松地指定适配器。例如:
interface IRequired
{
String doWhatClientNeeds(int x);
}
class Client
{
public void doTheThing(IRequired target);
}
class Adaptee
{
public String adapteeMethod(int x);
}
class ClassThatNeedsAdapter
{
private final Adaptee m_whatIHave;
public String doThingWithClient(Client client)
{
// super easy lambda adapter implements IRequired.doWhatClientNeeds
client.doTheThing(x -> m_whatIHave.adapteeMethod(x));
}
public String doOtherThingWithClient(Client client)
{
// method reference implements IRequired.doWhatClientNeeds
client.doTheThing(this::_complexAdapterMethod);
}
private String _complexAdapterMethod(int x)
{
...
}
}
当目标接口有多个方法时,我们使用匿名内部类:
interface IRequired
{
String clientNeed1(int x);
int clientNeed2(String x);
}
class Client
{
public void doTheThing(IRequired target);
}
class ClassThatNeedsAdapter
{
private final Adaptee m_whatIHave;
public String doThingWithClient(Client client)
{
IRequired adapter = new IRequired() {
public String clientNeed1(int x) {
return m_whatIHave.whatever(x);
}
public int clientNeed2(String x) {
return m_whatIHave.whateverElse(x);
}
};
return client.doTheThing(adapter);
}
}
您能提供您的C#示例吗,然后我们可以帮助您将其转换为规范的Java吗?@TobiasRoland,感谢您的快速回复,它使用C#委托,但Java没有对应的委托。Java适配器模式的在线示例很多-例如,这是第一个结果,Wikipedia也有一个Java示例。你能发布你特别关注的东西吗?Java使用功能接口而不是delegates@TobiasRoland,这是关于基本适配器模式的。我知道如何实现它。PluggableAdapter和普通适配器有什么区别<代码>需要适配器的类对于每个客户端都是不同的,每个客户端都将创建一个适配器(匿名类仍然是一个类)。它的“可插拔”部分是什么?@nits.kk它是不同的,因为它是内联写的-它没有自己的名字,你不必在不同的地方写它,你也不必按照引用来查看它。这与C#版本中的重要差异相同。它是否“仍然是一个类”只与学术相关。OK,但如果您看到关于可插拔适配器的GOF书籍,您可以看到
DirectoryBrowser
/DirectoryTreeDisplay
的明确的单独具体类。所以我的问题仍然是,这种适配器比普通适配器有什么特别之处。这本书来自《GOF:可重用面向对象软件的元素》一书,所以我想这本书是真实的,没有故事或解释,只是我需要帮助理解它。我想理解其中的例子,而不是外部不同的例子。我还提出了另一个例子。请帮助它不是特别的,但是可插拔适配器也不是特别的。他们只是用一点C#特定的糖来完成一些在其他语言中以其他方式完成的事情。他们所指的技术是相同的,但是使用smalltalk糖。不过,我会回答你的另一个问题